Gallery: Don't fire wikipage.content hook twice during init
authorEd Sanders <esanders@wikimedia.org>
Fri, 20 Sep 2019 12:22:04 +0000 (13:22 +0100)
committerEd Sanders <esanders@wikimedia.org>
Fri, 20 Sep 2019 12:22:04 +0000 (13:22 +0100)
We know the hook has already been fired once, because we listen
to it to start the gallery.

Firing it again here can cause other listeners to fail as only
the last-fired argument is stored.

Bug: T233401
Change-Id: I32ca866964c7a1f644a3cc28d636ec1430b8ef58

resources/src/mediawiki.page.gallery.slideshow.js

index 667c2ba..a36e409 100644 (file)
@@ -24,7 +24,7 @@
                this.drawCarousel();
                this.setSizeRequirement();
                this.toggleThumbnails( !!this.$gallery.attr( 'data-showthumbnails' ) );
-               this.showCurrentImage();
+               this.showCurrentImage( true );
 
                // Events
                $( window ).on(
 
        /**
         * Displays the image set as {@link #$currentImage} in the carousel.
+        *
+        * @param {boolean} init Image being show during gallery init (i.e. first image)
         */
-       mw.GallerySlideshow.prototype.showCurrentImage = function () {
+       mw.GallerySlideshow.prototype.showCurrentImage = function ( init ) {
                var $thumbnail, $imgLink,
                        $imageLi = this.getCurrentImage(),
                        $caption = $imageLi.find( '.gallerytext' );
                        if ( this.$thumbnail.attr( 'src' ) === $thumbnail.attr( 'src' ) ) {
                                this.$img.attr( 'src', info.thumburl );
                                this.setImageSize();
-                               mw.hook( 'wikipage.content' ).fire( this.$imgContainer );
+                               // Don't fire hook twice during init
+                               if ( !init ) {
+                                       mw.hook( 'wikipage.content' ).fire( this.$imgContainer );
+                               }
 
                                // Pre-fetch the next image
                                this.loadImage( this.getNextImage().find( 'img' ) );