From 27bc7e721273a759be7de03fd6c6e912133262f6 Mon Sep 17 00:00:00 2001 From: Stephen Niedzielski Date: Mon, 5 Mar 2018 14:42:00 -0600 Subject: [PATCH] Chore: move window.location use to client Move window.location manipulation from ImageOverlay view to MinervaNeue. Also, don't leave a hanging empty URL fragment when closing the overlay. Bug: T173539 Related: I292c0578716ff56e0e069aa8006f840025d78a88 Change-Id: I56ba9217aa9cd4e0a925c623060022392e3021c7 --- resources/skins.minerva.scripts/init.js | 35 ++++++++++++++++++++----- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/resources/skins.minerva.scripts/init.js b/resources/skins.minerva.scripts/init.js index 4b8c0c1..f9daef6 100644 --- a/resources/skins.minerva.scripts/init.js +++ b/resources/skins.minerva.scripts/init.js @@ -19,7 +19,15 @@ */ function onClickImage( ev ) { ev.preventDefault(); - router.navigate( '#/media/' + encodeURIComponent( $( this ).data( 'thumb' ).getFileName() ) ); + routeThumbnail( $( this ).data( 'thumb' ) ); + } + + /** + * @param {jQuery.Element} thumbnail + * @ignore + */ + function routeThumbnail( thumbnail ) { + router.navigate( '#/media/' + encodeURIComponent( thumbnail.getFileName() ) ); } /** @@ -98,12 +106,27 @@ return $.Deferred().reject(); } else { return loader.loadModule( 'mobile.mediaViewer' ).then( function () { - var ImageOverlay = M.require( 'mobile.mediaViewer/ImageOverlay' ); - return new ImageOverlay( { - api: new mw.Api(), - thumbnails: thumbs, - title: decodeURIComponent( title ) + var ImageOverlay = M.require( 'mobile.mediaViewer/ImageOverlay' ), + imageOverlay = new ImageOverlay( { + api: new mw.Api(), + thumbnails: thumbs, + title: decodeURIComponent( title ) + } ); + imageOverlay.on( ImageOverlay.EVENT_EXIT, function ( ev ) { + // Prevent going back in browser's history. + // See T94188 & T94363. + ev.preventDefault(); + ev.stopPropagation(); + // Manually close the overlay (OverlayManager does not expose a method + // to hide the active overlay). + imageOverlay.hide(); + // Update the URL by clearing fragment. + router.navigate( '' ); } ); + imageOverlay.on( ImageOverlay.EVENT_SLIDE, function ( nextThumbnail ) { + routeThumbnail( nextThumbnail ); + } ); + return imageOverlay; } ); } }