MarkTraceur has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/138879

Change subject: Use original URL when setting download for original
......................................................................

Use original URL when setting download for original

Messed with the download tests a bit too.

Change-Id: I6b7f6b5eb8642db1a81aff05663636813a21fe06
Mingle: https://wikimedia.mingle.thoughtworks.com/projects/multimedia/cards/470
(cherry picked from commit fc02ce0dc89b00f81a03b3e786ac2af60fa318a7)
---
M i18n/en.json
M i18n/qqq.json
M resources/mmv/ui/mmv.ui.reuse.download.js
M tests/qunit/mmv/ui/mmv.ui.reuse.download.test.js
4 files changed, 67 insertions(+), 24 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MultimediaViewer 
refs/changes/79/138879/1

diff --git a/i18n/en.json b/i18n/en.json
index f7090be..0b4c09b 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -59,7 +59,7 @@
     "multimediaviewer-embed-tab": "Embed",
     "multimediaviewer-download-tab": "Download",
     "multimediaviewer-download-preview-link-title": "Preview in browser",
-    "multimediaviewer-download-original-button-name": "Download original size",
+    "multimediaviewer-download-original-button-name": "Download original file",
     "multimediaviewer-download-small-button-name": "Download small size",
     "multimediaviewer-download-medium-button-name": "Download medium size",
     "multimediaviewer-download-large-button-name": "Download large size",
@@ -81,7 +81,7 @@
     "multimediaviewer-embed-license": "Licensed under $1.",
     "multimediaviewer-embed-via": "Via $1.",
     "multimediaviewer-default-embed-dimensions": "Default thumbnail size",
-    "multimediaviewer-original-embed-dimensions": "Original size $1",
+    "multimediaviewer-original-embed-dimensions": "Original file $1",
     "multimediaviewer-large-embed-dimensions": "Large $1",
     "multimediaviewer-medium-embed-dimensions": "Medium $1",
     "multimediaviewer-small-embed-dimensions": "Small $1",
diff --git a/i18n/qqq.json b/i18n/qqq.json
index e210079..5cb4bc3 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -65,7 +65,7 @@
        "multimediaviewer-embed-tab": "Tab title text for the file reuse panel 
- used for the section with embeddable HTML and wikitext.",
        "multimediaviewer-download-tab": "Tab title text for the file reuse 
panel - used for file download functionality.\n{{Identical|Download}}",
        "multimediaviewer-download-preview-link-title": "Text in the link that 
allows the user to preview the image of the selected size - used for file 
download functionality.",
-       "multimediaviewer-download-original-button-name": "Text inside the 
button that lets the user download the original size image - used for file 
download functionality.",
+       "multimediaviewer-download-original-button-name": "Text inside the 
button that lets the user download the original image - used for file download 
functionality.",
        "multimediaviewer-download-small-button-name": "Text inside the button 
that lets the user download a small version of the original image - used for 
file download functionality.",
        "multimediaviewer-download-medium-button-name": "Text inside the button 
that lets the user download a medium version of the original image - used for 
file download functionality.",
        "multimediaviewer-download-large-button-name": "Text inside the button 
that lets the user download a large version of the original image - used for 
file download functionality.",
diff --git a/resources/mmv/ui/mmv.ui.reuse.download.js 
b/resources/mmv/ui/mmv.ui.reuse.download.js
index 632689e..4b3453e 100644
--- a/resources/mmv/ui/mmv.ui.reuse.download.js
+++ b/resources/mmv/ui/mmv.ui.reuse.download.js
@@ -45,6 +45,9 @@
                 * @property {OO.ui.MenuItemWidget}
                 */
                this.defaultItem = 
this.downloadSizeMenu.getMenu().getSelectedItem();
+
+               /** @property {mw.mmv.model.Image|null} Image the download 
button currently points to. */
+               this.image = null;
        }
        oo.inheritClass( Download, mw.mmv.ui.reuse.Tab );
        DP = Download.prototype;
@@ -145,19 +148,34 @@
                var download = this,
                        value = item.getData();
 
-               // Disable download while we get the image
-               this.$downloadButton.addClass( 'disabledLink' );
-               // Set a temporary message. It will be updated once we have the 
file type.
-               this.setButtonText( value.name, this.imageExtension, 
value.width, value.height );
-
-               this.utils.getThumbnailUrlPromise( value.width ).done( function 
( thumbnail ) {
-                       download.$downloadButton.attr( 'href', thumbnail.url + 
'?download' );
-                       download.$previewLink.attr( 'href', thumbnail.url );
-                       download.setButtonText( value.name, 
download.getExtensionFromUrl( thumbnail.url ),
+               if ( value.name === 'original' && this.image !== null ) {
+                       this.setDownloadUrl( this.image.url );
+                       this.setButtonText( value.name, 
this.getExtensionFromUrl( this.image.url ),
                                value.width, value.height );
-                       // Re-enable download
-                       download.$downloadButton.removeClass( 'disabledLink' );
-               } );
+               } else {
+                       // Disable download while we get the image
+                       this.$downloadButton.addClass( 'disabledLink' );
+                       // Set a temporary message. It will be updated once we 
have the file type.
+                       this.setButtonText( value.name, this.imageExtension, 
value.width, value.height );
+
+                       this.utils.getThumbnailUrlPromise( value.width ).done( 
function ( thumbnail ) {
+                               download.setDownloadUrl( thumbnail.url );
+                               download.setButtonText( value.name, 
download.getExtensionFromUrl( thumbnail.url ),
+                                       value.width, value.height );
+                       } );
+               }
+       };
+
+       /**
+        * Sets the URL on the download button.
+        * @param {string} url
+        */
+       DP.setDownloadUrl = function ( url ) {
+               this.$downloadButton.attr( 'href', url + '?download' );
+               this.$previewLink.attr( 'href', url );
+
+               // Re-enable download
+               this.$downloadButton.removeClass( 'disabledLink' );
        };
 
        /**
@@ -200,6 +218,8 @@
                var sizeOptions = this.downloadSizeMenu.getMenu().getItems(),
                        sizes = this.utils.getPossibleImageSizesForHtml( 
image.width, image.height );
 
+               this.image = image;
+
                this.utils.updateMenuOptions( sizes, sizeOptions );
 
                this.downloadSizeMenu.$element.addClass( 'active' );
@@ -221,6 +241,8 @@
                this.$downloadButton.attr( 'href', '' );
                this.$previewLink.attr( 'href', '' );
                this.imageExtension = undefined;
+
+               this.image = null;
        };
 
 
diff --git a/tests/qunit/mmv/ui/mmv.ui.reuse.download.test.js 
b/tests/qunit/mmv/ui/mmv.ui.reuse.download.test.js
index 54a7947..ff46654 100644
--- a/tests/qunit/mmv/ui/mmv.ui.reuse.download.test.js
+++ b/tests/qunit/mmv/ui/mmv.ui.reuse.download.test.js
@@ -18,7 +18,7 @@
 ( function ( mw, $ ) {
        QUnit.module( 'mmv.ui.reuse.download', QUnit.newMwEnvironment() );
 
-       QUnit.test( 'Sanity test, object creation and UI construction', 6, 
function ( assert ) {
+       QUnit.test( 'Sanity test, object creation and UI construction', 9, 
function ( assert ) {
                var download = new mw.mmv.ui.reuse.Download( $( 
'#qunit-fixture' ) );
 
                assert.ok( download, 'download UI element is created.' );
@@ -27,6 +27,10 @@
                assert.ok( download.downloadSizeMenu, 'Image size pulldown menu 
created.' );
                assert.ok( download.$previewLink, 'Preview link created.' );
                assert.ok( download.defaultItem, 'Default item set.' );
+
+               assert.strictEqual( download.$downloadButton.html(), '', 
'Button has empty content.' );
+               assert.strictEqual( download.$downloadButton.attr( 'href' ), 
undefined, 'Button href is empty.' );
+               assert.strictEqual( download.$previewLink.attr( 'href' ), 
undefined, 'Preview link href is empty.' );
        } );
 
        QUnit.test( 'set()/empty():', 5, function ( assert ) {
@@ -106,23 +110,29 @@
                download.$selectionArrow.click();
        } );
 
-       QUnit.test( 'handleSizeSwitch():', 6, function ( assert ) {
+       QUnit.test( 'handleSizeSwitch():', 3, function ( assert ) {
                var download = new mw.mmv.ui.reuse.Download( $( 
'#qunit-fixture' ) ),
                        newImageUrl = 
'https://upload.wikimedia.org/wikipedia/commons/3/3a/NewFoobar.jpg';
 
-               assert.strictEqual( download.$downloadButton.html(), '', 
'Button has empty content.' );
-               assert.strictEqual( download.$downloadButton.attr( 'href' ), 
undefined, 'Button href is empty.' );
-               assert.strictEqual( download.$previewLink.attr( 'href' ), 
undefined, 'Preview link href is empty.' );
-
-               download.utils.getThumbnailUrlPromise = function() {
+               download.utils.getThumbnailUrlPromise = function () {
                        return $.Deferred().resolve( { url: newImageUrl } 
).promise();
+               };
+
+               download.setDownloadUrl = function ( url ) {
+                       assert.strictEqual( url, newImageUrl, 'URL passed to 
setDownloadUrl is correct' );
                };
 
                download.handleSizeSwitch( 
download.downloadSizeMenu.getMenu().getSelectedItem() );
 
                assert.ok( download.$downloadButton.html().match( /original.*/ 
), 'Button message updated.' );
-               assert.strictEqual( download.$downloadButton.attr( 'href' ), 
newImageUrl + '?download', 'Button href updated.' );
-               assert.strictEqual( download.$previewLink.attr( 'href' ), 
newImageUrl, 'Preview link href updated.' );
+
+               download.image = { url: newImageUrl };
+
+               download.utils.getThumbnailUrlPromise = function () {
+                       assert.ok( false, 'Should not fetch the thumbnail if 
the image is original size.' );
+               };
+
+               download.handleSizeSwitch( 
download.downloadSizeMenu.getMenu().getSelectedItem() );
        } );
 
        QUnit.test( 'setButtonText() sanity check:', 2, function ( assert ) {
@@ -143,4 +153,15 @@
                assert.strictEqual( download.getExtensionFromUrl( 
'http://example.com/bing/foo.bar.png' ),
                        'png', 'Extension is parsed correctly' );
        } );
+
+       QUnit.test( 'setDownloadUrl', 3, function ( assert ) {
+               var download = new mw.mmv.ui.reuse.Download( $( 
'#qunit-fixture' ) ),
+                       imageUrl = 
'https://upload.wikimedia.org/wikipedia/commons/3/3a/NewFoobar.jpg';
+
+               download.setDownloadUrl( imageUrl );
+
+               assert.strictEqual( download.$downloadButton.attr( 'href' ), 
imageUrl + '?download', 'Download link is set correctly.' );
+               assert.strictEqual( download.$previewLink.attr( 'href' ), 
imageUrl, 'Preview link is set correctly.' );
+               assert.ok( !download.$downloadButton.hasClass( 'disabledLink' 
), 'Download link is enabled.' );
+       } );
 }( mediaWiki, jQuery ) );

-- 
To view, visit https://gerrit.wikimedia.org/r/138879
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6b7f6b5eb8642db1a81aff05663636813a21fe06
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MultimediaViewer
Gerrit-Branch: wmf/1.24wmf8
Gerrit-Owner: MarkTraceur <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to