Merge "Avoid abrupt and jarring white flash in media viewer"

This commit is contained in:
jenkins-bot 2018-08-28 19:42:04 +00:00 committed by Gerrit Code Review
commit 198276256e
1 changed files with 35 additions and 18 deletions

View File

@ -11,6 +11,7 @@
OverlayManager = M.require( 'mobile.startup/OverlayManager' ), OverlayManager = M.require( 'mobile.startup/OverlayManager' ),
overlayManager = new OverlayManager( require( 'mediawiki.router' ) ), overlayManager = new OverlayManager( require( 'mediawiki.router' ) ),
page = M.getCurrentPage(), page = M.getCurrentPage(),
api = new mw.Api(),
thumbs = page.getThumbnails(); thumbs = page.getThumbnails();
/** /**
@ -93,23 +94,17 @@
} }
/** /**
* Load image overlay * Make an instance of an ImageOverlay. This function assumes that the module
* providing the ImageOverlay has been asynchronously loaded.
* @method * @method
* @ignore * @ignore
* @uses ImageOverlay
* @param {string} title Url of image * @param {string} title Url of image
* @return {JQuery.Deferred} * @return {ImageOverlay}
*/ */
function loadImageOverlay( title ) { function makeImageOverlay( title ) {
if ( mw.loader.getState( 'mmv.bootstrap' ) === 'ready' ) {
// This means MultimediaViewer has been installed and is loaded.
// Avoid loading it (T169622)
return $.Deferred().reject();
} else {
return loader.loadModule( 'mobile.mediaViewer' ).then( function () {
var ImageOverlay = M.require( 'mobile.mediaViewer/ImageOverlay' ), var ImageOverlay = M.require( 'mobile.mediaViewer/ImageOverlay' ),
imageOverlay = new ImageOverlay( { imageOverlay = new ImageOverlay( {
api: new mw.Api(), api: api,
thumbnails: thumbs, thumbnails: thumbs,
title: decodeURIComponent( title ) title: decodeURIComponent( title )
} ); } );
@ -123,6 +118,28 @@
routeThumbnail( nextThumbnail ); routeThumbnail( nextThumbnail );
} ); } );
return imageOverlay; return imageOverlay;
}
/**
* Load image overlay
* @method
* @ignore
* @uses ImageOverlay
* @param {string} title Url of image
* @return {JQuery.Deferred|ImageOverlay}
*/
function loadImageOverlay( title ) {
if ( mw.loader.getState( 'mmv.bootstrap' ) === 'ready' ) {
// This means MultimediaViewer has been installed and is loaded.
// Avoid loading it (T169622)
return $.Deferred().reject();
} else if ( mw.loader.getState( 'mobile.mediaViewer' ) === 'ready' ) {
// If module already loaded, do this synchronously to avoid the event loop causing
// a visible flash (see T197110)
return makeImageOverlay( title );
} else {
return loader.loadModule( 'mobile.mediaViewer' ).then( function () {
return makeImageOverlay( title );
} ); } );
} }
} }
@ -134,7 +151,7 @@
return loader.loadModule( 'mobile.languages.structured', true ).then( function ( loadingOverlay ) { return loader.loadModule( 'mobile.languages.structured', true ).then( function ( loadingOverlay ) {
var PageGateway = M.require( 'mobile.startup/PageGateway' ), var PageGateway = M.require( 'mobile.startup/PageGateway' ),
gateway = new PageGateway( new mw.Api() ), gateway = new PageGateway( api ),
LanguageOverlay = M.require( 'mobile.languages.structured/LanguageOverlay' ); LanguageOverlay = M.require( 'mobile.languages.structured/LanguageOverlay' );
return gateway.getPageLanguages( mw.config.get( 'wgPageName' ), lang ).then( function ( data ) { return gateway.getPageLanguages( mw.config.get( 'wgPageName' ), lang ).then( function ( data ) {