(function() {
(function($) {
return $.fn.imgPreload = function(options) {
var delay_completion, i, image_stack, placeholder_stack, replace, settings, spinner_stack, src, x, _i, _len;
settings = {
fake_delay: 10,
animation_duration: 1000,
spinner_src: 'spinner.gif'
};
if (options) {
$.extend(settings, options);
}
image_stack = [];
placeholder_stack = [];
spinner_stack = [];
window.delay_completed = false;
delay_completion = function() {
var x, _i, _len, _results;
window.delay_completed = true;
_results = [];
for (_i = 0, _len = image_stack.length; _i < _len; _i++) {
x = image_stack[_i];
_results.push($(x).attr('data-load-after-delay') === 'true' ? (replace(x), $(x).removeAttr('data-load-after-delay')) : void 0);
}
return _results;
};
setTimeout(delay_completion, settings.fake_delay);
this.each(function() {
var $image, $placeholder, $spinner_img, offset_left, offset_top;
$image = $(this);
offset_top = $image.offset().top;
offset_left = $image.offset().left;
$spinner_img = $('
');
$placeholder = $('
').attr({
src: 'data:image/gif;base64,R0lGODlhAQABA\
IABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='
});
$placeholder.attr({
width: $image.attr('width')
});
$placeholder.attr({
height: $image.attr('height')
});
spinner_stack.push($spinner_img);
placeholder_stack.push($placeholder);
image_stack.push($image.replaceWith($placeholder));
$('body').append($spinner_img);
$spinner_img.css({
position: 'absolute'
});
$spinner_img.css('z-index', 9999);
$spinner_img.load(function() {
$(this).css({
left: (offset_left + $placeholder.width() / 2) - $(this).width() / 2
});
return $(this).css({
top: (offset_top + $placeholder.height() / 2) - $(this).height() / 2
});
});
return $spinner_img.attr({
src: settings.spinner_src
});
});
i = 0;
for (_i = 0, _len = image_stack.length; _i < _len; _i++) {
x = image_stack[_i];
x.attr({
no: i++
});
src = x.attr('src');
x.attr({
src: ''
});
x.load(function() {
if (window.delay_completed) {
return replace(this);
} else {
return $(this).attr('data-load-after-delay', true);
}
});
x.attr({
src: src
});
}
replace = function(image) {
var $image, no_;
$image = $(image);
no_ = $image.attr('no');
placeholder_stack[no_].replaceWith($image);
spinner_stack[no_].fadeOut(settings.animation_duration / 2, function() {
return $(this).remove();
});
return $image.fadeOut(0).fadeIn(settings.animation_duration);
};
return this;
};
})(jQuery);
}).call(this);