Merge "Add config for serving main Page from the domain root"
[lhc/web/wiklou.git] / resources / src / mediawiki.page.gallery.slideshow.js
index 4ea1999..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(
 
                // Make the image smaller in case the current image
                // size is larger than the original file size.
-               this.getImageInfo( this.$thumbnail ).done( function ( info ) {
+               this.getImageInfo( this.$thumbnail ).then( function ( info ) {
                        // NOTE: There will be a jump when resizing the window
                        // because the cache is cleared and this a new network request.
                        if (
 
        /**
         * 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' ) );
         *  element once the image has loaded.
         */
        mw.GallerySlideshow.prototype.loadImage = function ( $img ) {
-               var img, d = $.Deferred();
-
-               this.getImageInfo( $img ).done( function ( info ) {
+               return this.getImageInfo( $img ).then( function ( info ) {
+                       var img, d = $.Deferred();
                        img = new Image();
                        img.src = info.thumburl;
                        img.onload = function () {
                        img.onerror = function () {
                                d.reject();
                        };
-               } ).fail( function () {
-                       d.reject();
+                       return d.promise();
                } );
-
-               return d.promise();
        };
 
        /**