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/",