piwigo/themes/default/js/image.loader.js
rvelices 225b45f2b8 feature 2548 multisize - added a page to build missing derivatives
- browser driven, chained ws calls to retrieve urls, visual feedback of progress through slideshow

git-svn-id: http://piwigo.org/svn/trunk@12865 68402e56-0260-453c-a942-63ccdbb3a9ee
2012-01-08 19:25:52 +00:00

84 lines
No EOL
1.6 KiB
JavaScript

function ImageLoader(opts) {
this.opts = jQuery.extend( {
maxRequests: 6,
onChanged: jQuery.noop
}, opts||{} );
}
ImageLoader.prototype = {
loaded: 0,
errors: 0,
errorEma: 0,
pause: false,
current: [],
queue: [],
pool: [],
remaining: function() {
return this.current.length + this.queue.length;
},
add: function(urls) {
this.queue = this.queue.concat( urls );
this._fireChanged("add");
this._checkQueue();
},
clear: function() {
this.queue.length = 0;
while (this.current.length)
jQuery( this.current.pop() ).unbind();
this.loaded = this.errors = this.errorEma = 0;
},
pause: function(val) {
if (val !== undefined)
{
this.paused = val;
this._checkQueue();
}
return this.paused;
},
_checkQueue: function() {
while (!this.paused
&& this.queue.length
&& this.current.length < this.opts.maxRequests)
{
this._processOne( this.queue.shift() );
}
},
_processOne: function(url) {
var img = this.pool.shift() || new Image;
this.current.push(img);
var that = this;
jQuery(img).bind( "load error abort", function(e) {
//img.onload = function(e) {
jQuery(img).unbind();
img.onload=null;
that.current.splice(jQuery.inArray(img, that.current), 1);
if (e.type==="load") {
that.loaded++;
that.errorEma *= 0.9;
}
else {
that.errors++;
that.errorEma++;
if (that.errorEma>=20 && that.errorEma<21)
that.paused = true;
}
that._fireChanged(e.type, img);
that._checkQueue();
that.pool.push(img);
} );
img.src = url;
},
_fireChanged: function(type, img) {
this.opts.onChanged(type, img);
}
}