Gilles has uploaded a new change for review.

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

Change subject: Make Media Viewer pluggable for the 3D extension
......................................................................

Make Media Viewer pluggable for the 3D extension

Bug: T132064
Change-Id: I2a95ba703e6c7f46296f8e435bceec769dceebf9
---
M MultimediaViewerHooks.php
M extension.json
M resources/mmv/logging/mmv.logging.ViewLogger.js
M resources/mmv/mmv.Config.js
M resources/mmv/mmv.bootstrap.js
M resources/mmv/mmv.js
M resources/mmv/ui/mmv.ui.canvas.less
M tests/qunit/mmv/logging/mmv.logging.ViewLogger.test.js
M tests/qunit/mmv/mmv.bootstrap.test.js
M tests/qunit/mmv/mmv.lightboxinterface.test.js
M tests/qunit/mmv/mmv.test.js
11 files changed, 130 insertions(+), 53 deletions(-)


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

diff --git a/MultimediaViewerHooks.php b/MultimediaViewerHooks.php
index d05da2a..2ef44d6 100644
--- a/MultimediaViewerHooks.php
+++ b/MultimediaViewerHooks.php
@@ -287,7 +287,7 @@
                       $wgMediaViewerDurationLoggingSamplingFactor, 
$wgMediaViewerDurationLoggingLoggedinSamplingFactor,
                       $wgMediaViewerAttributionLoggingSamplingFactor, 
$wgMediaViewerDimensionLoggingSamplingFactor,
                       $wgMediaViewerIsInBeta, 
$wgMediaViewerUseThumbnailGuessing, $wgMediaViewerImageQueryParameter,
-                      $wgMediaViewerRecordVirtualViewBeaconURI;
+                      $wgMediaViewerRecordVirtualViewBeaconURI, 
$wgMediaViewerExtensions;
 
                $vars['wgMultimediaViewer'] = array(
                        'infoLink' => self::$infoLink,
@@ -303,6 +303,7 @@
                        'imageQueryParameter' => 
$wgMediaViewerImageQueryParameter,
                        'recordVirtualViewBeaconURI' => 
$wgMediaViewerRecordVirtualViewBeaconURI,
                        'tooltipDelay' => 1000,
+                       'extensions' => $wgMediaViewerExtensions,
                );
                $vars['wgMediaViewer'] = true;
                $vars['wgMediaViewerIsInBeta'] = $wgMediaViewerIsInBeta;
diff --git a/extension.json b/extension.json
index 96b78c2..bfbfdbd 100644
--- a/extension.json
+++ b/extension.json
@@ -401,6 +401,16 @@
                        "MultimediaViewerHooks::thumbnailBeforeProduceHTML"
                ]
        },
-       "config": {},
+       "config": {
+               "MediaViewerExtensions": {
+                       "jpg": "default",
+                       "jpeg": "default",
+                       "gif": "default",
+                       "svg": "default",
+                       "png": "default",
+                       "tiff": "default",
+                       "tif": "default"
+               }
+       },
        "manifest_version": 1
 }
diff --git a/resources/mmv/logging/mmv.logging.ViewLogger.js 
b/resources/mmv/logging/mmv.logging.ViewLogger.js
index 1a158d0..5a58dd3 100644
--- a/resources/mmv/logging/mmv.logging.ViewLogger.js
+++ b/resources/mmv/logging/mmv.logging.ViewLogger.js
@@ -23,13 +23,11 @@
         * @class mw.mmv.logging.ViewLogger
         * @extends mw.Api
         * @constructor
-        * @param {mw.Map} mwConfig mw.config
+        * @param {mw.mmv.Config} config mw.mmv.Config object
         * @param {Object} window Browser window object
         * @param {mw.mmv.logging.ActionLogger} actionLogger ActionLogger object
         */
-       function ViewLogger( mwConfig, windowObject, actionLogger ) {
-               var config = mwConfig && mwConfig.get ? mwConfig.get( 
'wgMultimediaViewer' ) : false;
-
+       function ViewLogger( config, windowObject, actionLogger ) {
                /**
                 * Was the last image view logged or was logging skipped?
                 * @property {boolean}
@@ -58,7 +56,7 @@
                 * If set, URI to send the beacon request to in order to record 
the virtual view
                 * @property {string}
                 */
-               this.recordVirtualViewBeaconURI = config ? 
config.recordVirtualViewBeaconURI : false;
+               this.recordVirtualViewBeaconURI = 
config.recordVirtualViewBeaconURI();
 
                /**
                 * Browser window
diff --git a/resources/mmv/mmv.Config.js b/resources/mmv/mmv.Config.js
index de5dbc7..733a967 100644
--- a/resources/mmv/mmv.Config.js
+++ b/resources/mmv/mmv.Config.js
@@ -222,5 +222,45 @@
                this.setInLocalStorage( 'mmv-showStatusInfo', '0' );
        };
 
+       /**
+        * Returns extensions handled by Media Viewer.
+        * @returns {Object}
+        */
+       CP.extensions = function ( ) {
+               return this.viewerConfig.extensions;
+       };
+
+       /**
+        * Returns UI language
+        * @returns {string} Language code
+        */
+       CP.language = function ( ) {
+               return this.mwConfig.get( 'wgUserLanguage', false ) || 
this.mwConfig.get( 'wgContentLanguage', 'en' );
+       };
+
+       /**
+        * Returns URI of virtual view beacon or false if not set
+        * @returns {string|boolean} URI
+        */
+       CP.recordVirtualViewBeaconURI = function ( ) {
+               return this.viewerConfig.recordVirtualViewBeaconURI;
+       };
+
+       /**
+        * Returns useThumbnailGuessing flag
+        * @returns {boolean}
+        */
+       CP.useThumbnailGuessing = function ( ) {
+               return this.viewerConfig.useThumbnailGuessing;
+       };
+
+       /**
+        * Returns imageQueryParameter, if set
+        * @returns {string|boolean}
+        */
+       CP.imageQueryParameter = function ( ) {
+               return this.viewerConfig.imageQueryParameter;
+       };
+
        mw.mmv.Config = Config;
 } ( mediaWiki, jQuery ) );
diff --git a/resources/mmv/mmv.bootstrap.js b/resources/mmv/mmv.bootstrap.js
index d1e3ef0..e7f5cec 100644
--- a/resources/mmv/mmv.bootstrap.js
+++ b/resources/mmv/mmv.bootstrap.js
@@ -30,16 +30,6 @@
                        localStorage = window.localStorage || false;
                } catch ( e ) { }
 
-               this.validExtensions = {
-                       'jpg' : true,
-                       'jpeg' : true,
-                       'gif' : true,
-                       'svg' : true,
-                       'png' : true,
-                       'tiff' : true,
-                       'tif' : true
-               };
-
                // Exposed for tests
                this.hoverWaitDuration = 200;
 
@@ -53,6 +43,8 @@
                        new mw.Api(),
                        localStorage
                );
+
+               this.validExtensions = this.config.extensions();
 
                /** @property {mw.mmv.HtmlUtils} htmlUtils - */
                this.htmlUtils = new mw.mmv.HtmlUtils();
@@ -184,7 +176,7 @@
                        link = $link.prop( 'href' ),
                        alt = $thumb.attr( 'alt' );
 
-               if ( !bs.validExtensions[ title.getExtension().toLowerCase() ] 
) {
+               if ( !( title.getExtension().toLowerCase() in 
bs.validExtensions ) ) {
                        return;
                }
 
@@ -494,7 +486,7 @@
         */
        MMVB.getViewer = function () {
                if ( this.viewer === undefined ) {
-                       this.viewer = new mw.mmv.MultimediaViewer( mw.config );
+                       this.viewer = new mw.mmv.MultimediaViewer( this.config 
);
                        this.viewer.setupEventHandlers();
                        mw.mmv.viewer = this.viewer;
                }
diff --git a/resources/mmv/mmv.js b/resources/mmv/mmv.js
index 4836612..065f7bd 100644
--- a/resources/mmv/mmv.js
+++ b/resources/mmv/mmv.js
@@ -24,30 +24,30 @@
         * to manage the viewing experience of such content.
         * @class mw.mmv.MultimediaViewer
         * @constructor
-        * @param {mw.Map} mwConfig mw.config
+        * @param {mw.mmv.Config} config mw.mmv.Config object
         */
-       function MultimediaViewer( mwConfig ) {
+       function MultimediaViewer( config ) {
                var apiCacheMaxAge = 86400; // one day (24 hours * 60 min * 60 
sec)
                var apiCacheFiveMinutes = 300; // 5 min * 60 sec
 
                /**
-                * @property {mw.Map}
+                * @property {mw.mmv.Config}
                 * @private
                 */
-               this.mwConfig = mwConfig;
+               this.config = config;
 
                /**
                 * @property {mw.mmv.provider.Image}
                 * @private
                 */
-               this.imageProvider = new mw.mmv.provider.Image( mw.config.get( 
'wgMultimediaViewer' ).imageQueryParameter );
+               this.imageProvider = new mw.mmv.provider.Image( 
this.config.imageQueryParameter() );
 
                /**
                 * @property {mw.mmv.provider.ImageInfo}
                 * @private
                 */
                this.imageInfoProvider = new mw.mmv.provider.ImageInfo( new 
mw.mmv.logging.Api( 'imageinfo' ), {
-                       language: this.mwConfig.get( 'wgUserLanguage', false ) 
|| this.mwConfig.get( 'wgContentLanguage', 'en' ),
+                       language: this.config.language(),
                        maxage: apiCacheFiveMinutes
                });
 
@@ -107,7 +107,7 @@
                /**
                 * @property {mw.mmv.logging.ViewLogger} view -
                 */
-               this.viewLogger = new mw.mmv.logging.ViewLogger( this.mwConfig, 
window, mw.mmv.actionLogger );
+               this.viewLogger = new mw.mmv.logging.ViewLogger( this.config, 
window, mw.mmv.actionLogger );
        }
 
        MMVP = MultimediaViewer.prototype;
@@ -228,10 +228,13 @@
                        canvasDimensions,
                        imagePromise,
                        metadataPromise,
+                       pluginsPromise,
                        start,
                        viewer = this,
                        $initialImage = $( initialImage ),
                        extraStatsDeferred = $.Deferred();
+
+               pluginsPromise = this.loadExtensionPlugins( 
image.filePageTitle.ext );
 
                this.currentIndex = image.index;
 
@@ -251,6 +254,8 @@
                // the aspect ratio
                $initialImage.hide();
                $initialImage.addClass( 'mw-mmv-placeholder-image' );
+               $initialImage.addClass( image.filePageTitle.ext );
+
                this.ui.canvas.set( image, $initialImage );
 
                this.preloadImagesMetadata();
@@ -294,8 +299,13 @@
                                } );
                        }
 
-                       imageElement.className = 'mw-mmv-final-image';
+                       imageElement.className = 'mw-mmv-final-image ' + 
image.filePageTitle.ext;
                        imageElement.alt = image.alt;
+
+                       $.when( metadataPromise, pluginsPromise ).done( 
function ( metadata ) {
+                               $( document ).trigger( $.Event( 'mmv-metadata', 
{ viewer : viewer, image : image, imageInfo: metadata[ 0 ] } ) );
+                       } );
+
                        viewer.displayRealThumbnail( thumbnail, imageElement, 
imageWidths, $.now() - start );
                } ).fail( function ( error ) {
                        viewer.ui.canvas.showError( error );
@@ -741,7 +751,7 @@
 
                if (
                        sampleUrl && originalWidth && originalHeight &&
-                       mw.config.get( 'wgMultimediaViewer' 
).useThumbnailGuessing
+                       this.config.useThumbnailGuessing()
                ) {
                        guessing = true;
                        thumbnailPromise = 
this.guessedThumbnailInfoProvider.get(
@@ -946,5 +956,25 @@
                mw.loader.load( [ 'mmv.ui.reuse.shareembed', 'moment' ] );
        };
 
+       /**
+        * Loads the RL module defined for a given file extenion, if any
+        * @param {string} extension File extension
+        * @returns {jQuery.Promise}
+        */
+       MMVP.loadExtensionPlugins = function ( extension ) {
+               var deferred = $.Deferred(),
+                       config = this.config.extensions();
+
+               if ( !( extension in config ) || config[ extension ] == 
'default' ) {
+                       return deferred.resolve();
+               }
+
+               mw.loader.using( config[ extension ], function() {
+                       deferred.resolve();
+               } );
+
+               return deferred;
+       };
+
        mw.mmv.MultimediaViewer = MultimediaViewer;
 }( mediaWiki, jQuery ) );
diff --git a/resources/mmv/ui/mmv.ui.canvas.less 
b/resources/mmv/ui/mmv.ui.canvas.less
index df1de15..6ad2f86 100644
--- a/resources/mmv/ui/mmv.ui.canvas.less
+++ b/resources/mmv/ui/mmv.ui.canvas.less
@@ -44,6 +44,14 @@
                        font-size: 22px;
                }
        }
+
+       // For the 3d extensions. Needs to be defined here because it's needed 
before the 3d
+       // extension's code is loaded. And we don't want the placeholder to 
wait on the whole
+       // 3d library before appearing.
+       img.stl, img.amf {
+               background: none;
+               border: none;
+       }
 }
 
 .mw-mmv-image.empty img {
diff --git a/tests/qunit/mmv/logging/mmv.logging.ViewLogger.test.js 
b/tests/qunit/mmv/logging/mmv.logging.ViewLogger.test.js
index e365a55..4d373e4 100644
--- a/tests/qunit/mmv/logging/mmv.logging.ViewLogger.test.js
+++ b/tests/qunit/mmv/logging/mmv.logging.ViewLogger.test.js
@@ -7,7 +7,7 @@
 
        QUnit.test( 'unview()', 4, function ( assert ) {
                var logger = { log: $.noop },
-                       viewLogger = new mw.mmv.logging.ViewLogger( {}, {}, 
logger );
+                       viewLogger = new mw.mmv.logging.ViewLogger( { 
recordVirtualViewBeaconURI : $.noop }, {}, logger );
 
                this.sandbox.stub( logger, 'log' );
 
@@ -32,7 +32,7 @@
 
        QUnit.test( 'focus and blur', 1, function ( assert ) {
                var fakeWindow = $( '<div>' ),
-                       viewLogger = new mw.mmv.logging.ViewLogger( {}, 
fakeWindow, { log: $.noop } );
+                       viewLogger = new mw.mmv.logging.ViewLogger( { 
recordVirtualViewBeaconURI : $.noop }, fakeWindow, { log: $.noop } );
 
                this.clock.tick( 1 ); // This is just so that $.now() > 0 in 
the fake timer environment
 
@@ -56,7 +56,7 @@
        } );
 
        QUnit.test( 'stopViewDuration before startViewDuration', 1, function ( 
assert ) {
-               var viewLogger = new mw.mmv.logging.ViewLogger( {}, {}, { log: 
$.noop } );
+               var viewLogger = new mw.mmv.logging.ViewLogger( { 
recordVirtualViewBeaconURI : $.noop }, {}, { log: $.noop } );
 
                this.clock.tick( 1 ); // This is just so that $.now() > 0 in 
the fake timer environment
 
diff --git a/tests/qunit/mmv/mmv.bootstrap.test.js 
b/tests/qunit/mmv/mmv.bootstrap.test.js
index 56c1fc9..a6322f2 100644
--- a/tests/qunit/mmv/mmv.bootstrap.test.js
+++ b/tests/qunit/mmv/mmv.bootstrap.test.js
@@ -288,7 +288,7 @@
                var bootstrap,
                        $div,
                        $link,
-                       viewer = new mw.mmv.MultimediaViewer( { get: $.noop } ),
+                       viewer = new mw.mmv.MultimediaViewer( { 
imageQueryParameter: $.noop, language: $.noop, recordVirtualViewBeaconURI: 
$.noop, extensions: function () { return { 'jpg' : 'default' }; } } ),
                        fname = 'valid',
                        imgSrc = '/' + fname + '.jpg/300px-' + fname + '.jpg',
                        imgRegex = new RegExp( imgSrc + '$' );
diff --git a/tests/qunit/mmv/mmv.lightboxinterface.test.js 
b/tests/qunit/mmv/mmv.lightboxinterface.test.js
index aee8e37..dcf1137 100644
--- a/tests/qunit/mmv/mmv.lightboxinterface.test.js
+++ b/tests/qunit/mmv/mmv.lightboxinterface.test.js
@@ -142,7 +142,7 @@
                var buttonOffset, panelBottom,
                        oldRevealButtonsAndFadeIfNeeded,
                        lightbox = new mw.mmv.LightboxInterface(),
-                       viewer = new mw.mmv.MultimediaViewer( { get: $.noop } ),
+                       viewer = new mw.mmv.MultimediaViewer( { 
imageQueryParameter: $.noop, language: $.noop, recordVirtualViewBeaconURI: 
$.noop, extensions: function () { return { 'jpg' : 'default' }; } } ),
                        oldFnEnterFullscreen = $.fn.enterFullscreen,
                        oldFnExitFullscreen = $.fn.exitFullscreen;
 
@@ -251,7 +251,7 @@
        } );
 
        QUnit.test( 'Keyboard prev/next', 2, function ( assert ) {
-               var viewer = new mw.mmv.MultimediaViewer( { get: $.noop } ),
+               var viewer = new mw.mmv.MultimediaViewer( { 
imageQueryParameter: $.noop, language: $.noop, recordVirtualViewBeaconURI: 
$.noop, extensions: function () { return { 'jpg' : 'default' }; } } ),
                        lightbox = new mw.mmv.LightboxInterface();
 
                viewer.setupEventHandlers();
diff --git a/tests/qunit/mmv/mmv.test.js b/tests/qunit/mmv/mmv.test.js
index e71ba6a..07138f3 100644
--- a/tests/qunit/mmv/mmv.test.js
+++ b/tests/qunit/mmv/mmv.test.js
@@ -2,7 +2,7 @@
        QUnit.module( 'mmv', QUnit.newMwEnvironment() );
 
        QUnit.test( 'eachPrealoadableLightboxIndex()', 11, function ( assert ) {
-               var viewer = new mw.mmv.MultimediaViewer( { get: $.noop } ),
+               var viewer = new mw.mmv.MultimediaViewer( { 
imageQueryParameter: $.noop, language: $.noop, recordVirtualViewBeaconURI: 
$.noop, extensions: function () { return { 'jpg' : 'default' }; } } ),
                        expectedIndices,
                        i;
 
@@ -31,7 +31,7 @@
 
        QUnit.test( 'Hash handling', 8, function ( assert ) {
                var oldUnattach,
-                       viewer = new mw.mmv.MultimediaViewer( { get: $.noop } ),
+                       viewer = new mw.mmv.MultimediaViewer( { 
imageQueryParameter: $.noop, language: $.noop, recordVirtualViewBeaconURI: 
$.noop, extensions: function () { return { 'jpg' : 'default' }; } } ),
                        ui = new mw.mmv.LightboxInterface(),
                        imageSrc = 'Foo bar.jpg',
                        image = { filePageTitle: new mw.Title( 'File:' + 
imageSrc ) };
@@ -113,7 +113,7 @@
 
        QUnit.test( 'Progress', 4, function ( assert ) {
                var imageDeferred = $.Deferred(),
-                       viewer = new mw.mmv.MultimediaViewer( { get: $.noop } ),
+                       viewer = new mw.mmv.MultimediaViewer( { 
imageQueryParameter: $.noop, language: $.noop, recordVirtualViewBeaconURI: 
$.noop, extensions: function () { return { 'jpg' : 'default' }; } } ),
                        fakeImage = {
                                filePageTitle: new mw.Title( 'File:Stuff.jpg' ),
                                extraStatsDeferred: $.Deferred().reject()
@@ -181,7 +181,7 @@
                                filePageTitle: new mw.Title( 'File:Second.jpg' 
),
                                extraStatsDeferred: $.Deferred().reject()
                        },
-                       viewer = new mw.mmv.MultimediaViewer( { get: $.noop } );
+                       viewer = new mw.mmv.MultimediaViewer( { 
imageQueryParameter: $.noop, language: $.noop, recordVirtualViewBeaconURI: 
$.noop, extensions: function () { return { 'jpg' : 'default' }; } } );
 
                // animation would keep running, conflict with other tests
                this.sandbox.stub( $.fn, 'animate' ).returnsThis();
@@ -282,7 +282,7 @@
        } );
 
        QUnit.test( 'resetBlurredThumbnailStates', 4, function ( assert ) {
-               var viewer = new mw.mmv.MultimediaViewer( { get: $.noop } );
+               var viewer = new mw.mmv.MultimediaViewer( { 
imageQueryParameter: $.noop, language: $.noop, recordVirtualViewBeaconURI: 
$.noop, extensions: function () { return { 'jpg' : 'default' }; } } );
 
                // animation would keep running, conflict with other tests
                this.sandbox.stub( $.fn, 'animate' ).returnsThis();
@@ -300,7 +300,7 @@
        } );
 
        QUnit.test( 'Placeholder first, then real thumbnail', 4, function ( 
assert ) {
-               var viewer = new mw.mmv.MultimediaViewer( { get: $.noop } );
+               var viewer = new mw.mmv.MultimediaViewer( { 
imageQueryParameter: $.noop, language: $.noop, recordVirtualViewBeaconURI: 
$.noop, extensions: function () { return { 'jpg' : 'default' }; } } );
 
                viewer.setImage = $.noop;
                viewer.ui = { canvas: {
@@ -322,7 +322,7 @@
        } );
 
        QUnit.test( 'Placeholder first, then real thumbnail - missing size', 4, 
function ( assert ) {
-               var viewer = new mw.mmv.MultimediaViewer( { get: $.noop } );
+               var viewer = new mw.mmv.MultimediaViewer( { 
imageQueryParameter: $.noop, language: $.noop, recordVirtualViewBeaconURI: 
$.noop, extensions: function () { return { 'jpg' : 'default' }; } } );
 
                viewer.currentIndex = 1;
                viewer.setImage = $.noop;
@@ -345,7 +345,7 @@
        } );
 
        QUnit.test( 'Real thumbnail first, then placeholder', 4, function ( 
assert ) {
-               var viewer = new mw.mmv.MultimediaViewer( { get: $.noop } );
+               var viewer = new mw.mmv.MultimediaViewer( { 
imageQueryParameter: $.noop, language: $.noop, recordVirtualViewBeaconURI: 
$.noop, extensions: function () { return { 'jpg' : 'default' }; } } );
 
                viewer.setImage = $.noop;
                viewer.ui = {
@@ -367,7 +367,7 @@
        } );
 
        QUnit.test( 'displayRealThumbnail', 2, function ( assert ) {
-               var viewer = new mw.mmv.MultimediaViewer( { get: $.noop } );
+               var viewer = new mw.mmv.MultimediaViewer( { 
imageQueryParameter: $.noop, language: $.noop, recordVirtualViewBeaconURI: 
$.noop, extensions: function () { return { 'jpg' : 'default' }; } } );
 
                viewer.setImage = $.noop;
                viewer.ui = { canvas: {
@@ -386,7 +386,7 @@
        } );
 
        QUnit.test( 'New image loaded while another one is loading', 5, 
function ( assert ) {
-               var viewer = new mw.mmv.MultimediaViewer( { get: $.noop } ),
+               var viewer = new mw.mmv.MultimediaViewer( { 
imageQueryParameter: $.noop, language: $.noop, recordVirtualViewBeaconURI: 
$.noop, extensions: function () { return { 'jpg' : 'default' }; } } ),
                        firstImageDeferred = $.Deferred(),
                        secondImageDeferred = $.Deferred(),
                        firstLigthboxInfoDeferred = $.Deferred(),
@@ -458,7 +458,7 @@
 
        QUnit.test( 'Events are not trapped after the viewer is closed', 0, 
function ( assert ) {
                var i, j, k, eventParameters,
-                       viewer = new mw.mmv.MultimediaViewer( { get: $.noop } ),
+                       viewer = new mw.mmv.MultimediaViewer( { 
imageQueryParameter: $.noop, language: $.noop, recordVirtualViewBeaconURI: 
$.noop, extensions: function () { return { 'jpg' : 'default' }; } } ),
                        $document = $( document ),
                        $qf = $( '#qunit-fixture' ),
                        eventTypes = [ 'keydown', 'keyup', 'keypress', 'click', 
'mousedown', 'mouseup' ],
@@ -533,7 +533,7 @@
        } );
 
        QUnit.test( 'Refuse to load too-big thumbnails', 1, function ( assert ) 
{
-               var viewer = new mw.mmv.MultimediaViewer( { get: $.noop } ),
+               var viewer = new mw.mmv.MultimediaViewer( { 
imageQueryParameter: $.noop, language: $.noop, recordVirtualViewBeaconURI: 
$.noop, extensions: function () { return { 'jpg' : 'default' }; } } ),
                        intendedWidth = 50,
                        title = mw.Title.newFromText( 'File:Foobar.svg' );
 
@@ -550,9 +550,9 @@
                        thumbnailInfoStub,
                        imageStub,
                        promise,
-                       viewer = new mw.mmv.MultimediaViewer( { get: $.noop } ),
+                       useThumbnailGuessing,
+                       viewer = new mw.mmv.MultimediaViewer( { 
imageQueryParameter: $.noop, language: $.noop, recordVirtualViewBeaconURI: 
$.noop, extensions: function () { return { 'jpg' : 'default' }; }, 
useThumbnailGuessing : function () { return useThumbnailGuessing; } } ),
                        sandbox = this.sandbox,
-                       oldUseThumbnailGuessing = mw.config.get( 
'wgMultimediaViewer' ).useThumbnailGuessing,
                        file = new mw.Title( 'File:Copyleft.svg' ),
                        sampleURL = 
'http://upload.wikimedia.org/wikipedia/commons/thumb/8/8b/Copyleft.svg/300px-Copyleft.svg.png',
                        width = 100,
@@ -566,7 +566,7 @@
                        imageStub = viewer.imageProvider.get = sandbox.stub();
                }
 
-               mw.config.get( 'wgMultimediaViewer' ).useThumbnailGuessing = 
true;
+               useThumbnailGuessing = true;
 
                // When we lack sample URL and original dimensions, the classic 
provider should be used
                setupStubs();
@@ -632,7 +632,7 @@
                assert.ok( imageStub.getCall( 1 ).calledWith( 'apiURL' ), 'When 
even the retry fails, ImageProvider is called second with the guessed url' );
                assert.strictEqual( promise.state(), 'rejected', 'When even the 
retry fails, fetchThumbnail rejects' );
 
-               mw.config.get( 'wgMultimediaViewer' ).useThumbnailGuessing = 
false;
+               useThumbnailGuessing = false;
 
                // When guessing is disabled, the classic provider is used
                setupStubs();
@@ -645,12 +645,10 @@
                assert.ok( imageStub.calledOnce, 'When guessing is disabled, 
ImageProvider is called once' );
                assert.ok( imageStub.calledWith( 'apiURL' ), 'When guessing is 
disabled, ImageProvider is called with the API url' );
                assert.strictEqual( promise.state(), 'resolved', 'When guessing 
is disabled, fetchThumbnail resolves' );
-
-               mw.config.get( 'wgMultimediaViewer' ).useThumbnailGuessing = 
oldUseThumbnailGuessing;
        } );
 
        QUnit.test( 'document.title', 2, function ( assert ) {
-               var viewer = new mw.mmv.MultimediaViewer( { get: $.noop } ),
+               var viewer = new mw.mmv.MultimediaViewer( { 
imageQueryParameter: $.noop, language: $.noop, recordVirtualViewBeaconURI: 
$.noop, extensions: function () { return { 'jpg' : 'default' }; } } ),
                        bootstrap = new mw.mmv.MultimediaViewerBootstrap(),
                        title = new mw.Title( 
'File:This_should_show_up_in_document_title.png' ),
                        oldDocumentTitle = document.title;

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2a95ba703e6c7f46296f8e435bceec769dceebf9
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MultimediaViewer
Gerrit-Branch: master
Gerrit-Owner: Gilles <[email protected]>

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

Reply via email to