diff --git a/CHANGELOG.md b/CHANGELOG.md
index a94419612..a8dc50ab2 100755
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+### v1.9.2.1
+*2014-09-07*
+
+**ccd0**
+- Improve reliability of thumbnail replacement / preloading by queueing downloads.
+
### v1.9.2.0
*2014-09-06*
diff --git a/LICENSE b/LICENSE
index cdd92d487..d2d7a1651 100755
--- a/LICENSE
+++ b/LICENSE
@@ -1,5 +1,5 @@
/*
-* 4chan X - Version 1.9.2.0
+* 4chan X - Version 1.9.2.1
*
* Licensed under the MIT license.
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
diff --git a/builds/4chan-X-beta.crx b/builds/4chan-X-beta.crx
index 5263f7315..02499e997 100644
Binary files a/builds/4chan-X-beta.crx and b/builds/4chan-X-beta.crx differ
diff --git a/builds/4chan-X-beta.meta.js b/builds/4chan-X-beta.meta.js
index de85e151a..95d0a9c1b 100644
--- a/builds/4chan-X-beta.meta.js
+++ b/builds/4chan-X-beta.meta.js
@@ -1,6 +1,6 @@
// ==UserScript==
// @name 4chan X
-// @version 1.9.2.0
+// @version 1.9.2.1
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
diff --git a/builds/4chan-X-beta.user.js b/builds/4chan-X-beta.user.js
index 8d603a453..ebdac6c84 100644
--- a/builds/4chan-X-beta.user.js
+++ b/builds/4chan-X-beta.user.js
@@ -1,7 +1,7 @@
// Generated by CoffeeScript
// ==UserScript==
// @name 4chan X
-// @version 1.9.2.0
+// @version 1.9.2.1
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
@@ -24,7 +24,7 @@
// ==/UserScript==
/*
-* 4chan X - Version 1.9.2.0
+* 4chan X - Version 1.9.2.1
*
* Licensed under the MIT license.
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
@@ -376,7 +376,7 @@
doc = d.documentElement;
g = {
- VERSION: '1.9.2.0',
+ VERSION: '1.9.2.1',
NAMESPACE: '4chan X.',
NAME: '4chan X',
FAQ: 'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions',
@@ -8662,7 +8662,7 @@
});
},
node: function(force) {
- var URL, cb, el, event, isImage, isVideo, match, prefetch, replace, style, thumb, type, _ref;
+ var URL, cb, el, isImage, isVideo, match, prefetch, replace, style, thumb, type, _ref;
if (!this.file) {
return;
}
@@ -8695,16 +8695,40 @@
el.loop = true;
el.className = thumb.className;
}
- event = isVideo ? 'loadeddata' : 'load';
cb = (function(_this) {
return function() {
- $.off(el, event, cb);
+ $.off(el, 'load loadeddata', cb);
return ImageLoader.replace(_this, el);
};
})(this);
- $.on(el, event, cb);
+ $.on(el, 'load loadeddata', cb);
+ }
+ ImageLoader.queue.push([el, URL]);
+ if (!ImageLoader.busy) {
+ return ImageLoader.next();
+ }
+ },
+ busy: false,
+ queue: [],
+ loadend: function() {
+ $.off(this, 'load loadeddata error', ImageLoader.loadend);
+ ImageLoader.busy = false;
+ return ImageLoader.next();
+ },
+ next: function() {
+ var el, item, url;
+ if (ImageLoader.busy) {
+ return;
+ }
+ if (item = ImageLoader.queue.shift()) {
+ el = item[0], url = item[1];
+ $.on(el, 'load loadeddata error', ImageLoader.loadend);
+ setTimeout((function() {
+ return ImageLoader.loadend.call(el);
+ }), $.SECOND);
+ el.src = url;
+ return ImageLoader.busy = true;
}
- return el.src = URL;
},
replace: function(post, el) {
var clone, file, isVideo, thumb, _i, _len, _ref;
@@ -12865,7 +12889,7 @@
className: 'dialog'
});
$.extend(dialog, {
- innerHTML: "
"
+ innerHTML: ""
});
$.on($('.export', Settings.dialog), 'click', Settings["export"]);
$.on($('.import', Settings.dialog), 'click', Settings["import"]);
diff --git a/builds/4chan-X-noupdate.crx b/builds/4chan-X-noupdate.crx
index e1c9a6796..88f9feb5f 100644
Binary files a/builds/4chan-X-noupdate.crx and b/builds/4chan-X-noupdate.crx differ
diff --git a/builds/4chan-X-noupdate.user.js b/builds/4chan-X-noupdate.user.js
index 9d1c2863c..6756d4ec8 100644
--- a/builds/4chan-X-noupdate.user.js
+++ b/builds/4chan-X-noupdate.user.js
@@ -1,7 +1,7 @@
// Generated by CoffeeScript
// ==UserScript==
// @name 4chan X
-// @version 1.9.2.0
+// @version 1.9.2.1
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
@@ -23,7 +23,7 @@
// ==/UserScript==
/*
-* 4chan X - Version 1.9.2.0
+* 4chan X - Version 1.9.2.1
*
* Licensed under the MIT license.
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
@@ -375,7 +375,7 @@
doc = d.documentElement;
g = {
- VERSION: '1.9.2.0',
+ VERSION: '1.9.2.1',
NAMESPACE: '4chan X.',
NAME: '4chan X',
FAQ: 'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions',
@@ -8661,7 +8661,7 @@
});
},
node: function(force) {
- var URL, cb, el, event, isImage, isVideo, match, prefetch, replace, style, thumb, type, _ref;
+ var URL, cb, el, isImage, isVideo, match, prefetch, replace, style, thumb, type, _ref;
if (!this.file) {
return;
}
@@ -8694,16 +8694,40 @@
el.loop = true;
el.className = thumb.className;
}
- event = isVideo ? 'loadeddata' : 'load';
cb = (function(_this) {
return function() {
- $.off(el, event, cb);
+ $.off(el, 'load loadeddata', cb);
return ImageLoader.replace(_this, el);
};
})(this);
- $.on(el, event, cb);
+ $.on(el, 'load loadeddata', cb);
+ }
+ ImageLoader.queue.push([el, URL]);
+ if (!ImageLoader.busy) {
+ return ImageLoader.next();
+ }
+ },
+ busy: false,
+ queue: [],
+ loadend: function() {
+ $.off(this, 'load loadeddata error', ImageLoader.loadend);
+ ImageLoader.busy = false;
+ return ImageLoader.next();
+ },
+ next: function() {
+ var el, item, url;
+ if (ImageLoader.busy) {
+ return;
+ }
+ if (item = ImageLoader.queue.shift()) {
+ el = item[0], url = item[1];
+ $.on(el, 'load loadeddata error', ImageLoader.loadend);
+ setTimeout((function() {
+ return ImageLoader.loadend.call(el);
+ }), $.SECOND);
+ el.src = url;
+ return ImageLoader.busy = true;
}
- return el.src = URL;
},
replace: function(post, el) {
var clone, file, isVideo, thumb, _i, _len, _ref;
@@ -12864,7 +12888,7 @@
className: 'dialog'
});
$.extend(dialog, {
- innerHTML: ""
+ innerHTML: ""
});
$.on($('.export', Settings.dialog), 'click', Settings["export"]);
$.on($('.import', Settings.dialog), 'click', Settings["import"]);
diff --git a/builds/4chan-X.crx b/builds/4chan-X.crx
index e28c3620a..f8f32afc6 100644
Binary files a/builds/4chan-X.crx and b/builds/4chan-X.crx differ
diff --git a/builds/4chan-X.meta.js b/builds/4chan-X.meta.js
index f0ffe093c..134099ea3 100644
--- a/builds/4chan-X.meta.js
+++ b/builds/4chan-X.meta.js
@@ -1,6 +1,6 @@
// ==UserScript==
// @name 4chan X
-// @version 1.9.2.0
+// @version 1.9.2.1
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js
index eceacd92d..18e19cf9b 100644
--- a/builds/4chan-X.user.js
+++ b/builds/4chan-X.user.js
@@ -1,7 +1,7 @@
// Generated by CoffeeScript
// ==UserScript==
// @name 4chan X
-// @version 1.9.2.0
+// @version 1.9.2.1
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
@@ -24,7 +24,7 @@
// ==/UserScript==
/*
-* 4chan X - Version 1.9.2.0
+* 4chan X - Version 1.9.2.1
*
* Licensed under the MIT license.
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
@@ -376,7 +376,7 @@
doc = d.documentElement;
g = {
- VERSION: '1.9.2.0',
+ VERSION: '1.9.2.1',
NAMESPACE: '4chan X.',
NAME: '4chan X',
FAQ: 'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions',
@@ -8662,7 +8662,7 @@
});
},
node: function(force) {
- var URL, cb, el, event, isImage, isVideo, match, prefetch, replace, style, thumb, type, _ref;
+ var URL, cb, el, isImage, isVideo, match, prefetch, replace, style, thumb, type, _ref;
if (!this.file) {
return;
}
@@ -8695,16 +8695,40 @@
el.loop = true;
el.className = thumb.className;
}
- event = isVideo ? 'loadeddata' : 'load';
cb = (function(_this) {
return function() {
- $.off(el, event, cb);
+ $.off(el, 'load loadeddata', cb);
return ImageLoader.replace(_this, el);
};
})(this);
- $.on(el, event, cb);
+ $.on(el, 'load loadeddata', cb);
+ }
+ ImageLoader.queue.push([el, URL]);
+ if (!ImageLoader.busy) {
+ return ImageLoader.next();
+ }
+ },
+ busy: false,
+ queue: [],
+ loadend: function() {
+ $.off(this, 'load loadeddata error', ImageLoader.loadend);
+ ImageLoader.busy = false;
+ return ImageLoader.next();
+ },
+ next: function() {
+ var el, item, url;
+ if (ImageLoader.busy) {
+ return;
+ }
+ if (item = ImageLoader.queue.shift()) {
+ el = item[0], url = item[1];
+ $.on(el, 'load loadeddata error', ImageLoader.loadend);
+ setTimeout((function() {
+ return ImageLoader.loadend.call(el);
+ }), $.SECOND);
+ el.src = url;
+ return ImageLoader.busy = true;
}
- return el.src = URL;
},
replace: function(post, el) {
var clone, file, isVideo, thumb, _i, _len, _ref;
@@ -12865,7 +12889,7 @@
className: 'dialog'
});
$.extend(dialog, {
- innerHTML: ""
+ innerHTML: ""
});
$.on($('.export', Settings.dialog), 'click', Settings["export"]);
$.on($('.import', Settings.dialog), 'click', Settings["import"]);
diff --git a/builds/4chan-X.zip b/builds/4chan-X.zip
index 17d7db865..3fc9ca3b4 100644
Binary files a/builds/4chan-X.zip and b/builds/4chan-X.zip differ
diff --git a/builds/updates-beta.xml b/builds/updates-beta.xml
index 2674ddbc9..27eb1d6e6 100644
--- a/builds/updates-beta.xml
+++ b/builds/updates-beta.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/builds/updates.xml b/builds/updates.xml
index 692536777..61a4d0206 100644
--- a/builds/updates.xml
+++ b/builds/updates.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/package.json b/package.json
index 583941189..a4a2bc854 100755
--- a/package.json
+++ b/package.json
@@ -3,7 +3,7 @@
"description": "Cross-browser userscript for maximum lurking on 4chan.",
"meta": {
"name": "4chan X",
- "version": "1.9.2.0",
+ "version": "1.9.2.1",
"repo": "https://github.com/ccd0/4chan-x/",
"page": "https://github.com/ccd0/4chan-x",
"downloads": "https://ccd0.github.io/4chan-x/builds/",