Fix bug that would cause the image to stay small

When opening the lightbox, the image might stay small
because of a race condition. This is fixed using a
deferred object.

Change-Id: I4e93c7d26da47e5177abeb1dac841bf6c25a9022
Mingle: https://wikimedia.mingle.thoughtworks.com/projects/multimedia/cards/138
This commit is contained in:
Mark Holmquist 2014-01-15 15:33:16 -08:00 committed by Gilles Dubuc
parent b2d986e2b4
commit 5e98e3bcd6
3 changed files with 26 additions and 9 deletions

View file

@ -27,18 +27,21 @@
*/
LIP.initialSrc = null;
LIP.getImageElement = function ( loadcb ) {
var ele;
LIP.getImageElement = function () {
var ele,
$deferred = $.Deferred(),
image = this;
lightboxHooks.callAll( 'beforeFetchImage', this );
ele = new Image();
ele.addEventListener( 'load', loadcb );
ele.addEventListener( 'error', $deferred.reject );
ele.addEventListener( 'load', function() { $deferred.resolve( image, ele ); } );
ele.src = this.src || this.initialSrc;
lightboxHooks.callAll( 'modifyImageElement', ele );
return ele;
return $deferred;
};
// Assumes that the parent element's size is the maximum size.

View file

@ -209,12 +209,13 @@
* @param {LightboxImage} image
*/
LIP.load = function ( image ) {
var iface = this,
ele = image.getImageElement( function () {
iface.loadCallback( image, ele );
} );
var iface = this;
this.currentImage = image;
image.getImageElement().done( function( image, ele ) {
iface.loadCallback.call( iface, image, ele );
} );
};
LIP.autoResizeImage = function () {

View file

@ -10,7 +10,20 @@
QUnit.start();
}
lightboxImage.getImageElement( loadCallback );
lightboxImage.getImageElement()
.done( loadCallback );
} );
QUnit.asyncTest( 'Image failing', 1, function ( assert ) {
var lightboxImage = new window.LightboxImage( 'http://thisdoesntexist/fail.jpg' );
function errorCallback() {
assert.ok( true, 'Image failed !' );
QUnit.start();
}
lightboxImage.getImageElement()
.fail( errorCallback );
} );
}( mediaWiki, jQuery ) );