From 2c81f67fd4f15c286904fa8a8562a80b15b20a25 Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Thu, 7 Mar 2013 22:09:32 +0100 Subject: [PATCH] Resize thumbnails on Opera too. --- 4chan_x.user.js | 43 +++++++++++++++++++++++++++---------------- src/qr.coffee | 40 +++++++++++++++++++++++----------------- 2 files changed, 50 insertions(+), 33 deletions(-) diff --git a/4chan_x.user.js b/4chan_x.user.js index 6aba7f3c6..bdfbf36d5 100644 --- a/4chan_x.user.js +++ b/4chan_x.user.js @@ -6297,7 +6297,7 @@ if (!window.URL) { return; } - return URL.revokeObjectURL(this.url); + return URL.revokeObjectURL(this.URL); }; _Class.prototype.lock = function(lock) { @@ -6372,8 +6372,6 @@ }; _Class.prototype.setFile = function(file) { - var fileURL, img, reader, - _this = this; this.file = file; this.filename = "" + file.name + " (" + ($.bytesToString(file.size)) + ")"; this.nodes.el.title = this.filename; @@ -6381,30 +6379,38 @@ this.nodes.label.hidden = false; } if (window.URL) { - URL.revokeObjectURL(this.url); + URL.revokeObjectURL(this.URL); } this.showFileData(); if (!/^image/.test(file.type)) { this.nodes.el.style.backgroundImage = null; return; } + return this.setThumbnail(); + }; + + _Class.prototype.setThumbnail = function(fileURL) { + var img, reader, + _this = this; if (!window.URL) { - reader = new FileReader(); - reader.onload = function(e) { - return _this.nodes.el.style.backgroundImage = "url(" + e.target.result + ")"; - }; - reader.readAsDataURL(file); - return; + if (!fileURL) { + reader = new FileReader(); + reader.onload = function(e) { + return _this.setThumbnail(e.target.result); + }; + reader.readAsDataURL(this.file); + } + } else { + fileURL = URL.createObjectURL(this.file); } - fileURL = URL.createObjectURL(file); img = $.el('img'); img.onload = function() { var applyBlob, c, data, height, i, l, s, ui8a, width, _i; s = 90 * 3; height = img.height, width = img.width; if (height < s || width < s) { - _this.url = fileURL; - _this.nodes.el.style.backgroundImage = "url(" + _this.url + ")"; + _this.URL = fileURL; + _this.nodes.el.style.backgroundImage = "url(" + _this.URL + ")"; return; } if (height <= width) { @@ -6418,10 +6424,15 @@ c.height = img.height = height; c.width = img.width = width; c.getContext('2d').drawImage(img, 0, 0, width, height); + if (!window.URL) { + _this.nodes.el.style.backgroundImage = "url(" + (c.toDataURL()) + ")"; + delete _this.URL; + return; + } URL.revokeObjectURL(fileURL); applyBlob = function(blob) { - _this.url = URL.createObjectURL(blob); - return _this.nodes.el.style.backgroundImage = "url(" + _this.url + ")"; + _this.URL = URL.createObjectURL(blob); + return _this.nodes.el.style.backgroundImage = "url(" + _this.URL + ")"; }; if (c.toBlob) { c.toBlob(applyBlob); @@ -6452,7 +6463,7 @@ if (!window.URL) { return; } - return URL.revokeObjectURL(this.url); + return URL.revokeObjectURL(this.URL); }; _Class.prototype.showFileData = function(hide) { diff --git a/src/qr.coffee b/src/qr.coffee index 96ed44b5e..4072e0ee0 100644 --- a/src/qr.coffee +++ b/src/qr.coffee @@ -409,7 +409,7 @@ QR = (QR.posts[index-1] or QR.posts[index+1]).select() QR.posts.splice index, 1 return unless window.URL - URL.revokeObjectURL @url + URL.revokeObjectURL @URL lock: (lock=true) -> @isLocked = lock return unless @ is QR.selected @@ -459,23 +459,25 @@ QR = @filename = "#{file.name} (#{$.bytesToString file.size})" @nodes.el.title = @filename @nodes.label.hidden = false if QR.spoiler - URL.revokeObjectURL @url if window.URL + URL.revokeObjectURL @URL if window.URL @showFileData() unless /^image/.test file.type @nodes.el.style.backgroundImage = null return - + @setThumbnail() + setThumbnail: (fileURL) -> # XXX Opera does not support blob URL - unless window.URL - reader = new FileReader() - reader.onload = (e) => - @nodes.el.style.backgroundImage = "url(#{e.target.result})" - reader.readAsDataURL file - return - # Create a redimensioned thumbnail. - fileURL = URL.createObjectURL file - img = $.el 'img' + unless window.URL + unless fileURL + reader = new FileReader() + reader.onload = (e) => + @setThumbnail e.target.result + reader.readAsDataURL @file + else + fileURL = URL.createObjectURL @file + + img = $.el 'img' img.onload = => # Generate thumbnails only if they're really big. @@ -485,8 +487,8 @@ QR = s = 90*3 {height, width} = img if height < s or width < s - @url = fileURL - @nodes.el.style.backgroundImage = "url(#{@url})" + @URL = fileURL + @nodes.el.style.backgroundImage = "url(#{@URL})" return if height <= width width = s / height * width @@ -498,10 +500,14 @@ QR = c.height = img.height = height c.width = img.width = width c.getContext('2d').drawImage img, 0, 0, width, height + unless window.URL + @nodes.el.style.backgroundImage = "url(#{c.toDataURL()})" + delete @URL + return URL.revokeObjectURL fileURL applyBlob = (blob) => - @url = URL.createObjectURL blob - @nodes.el.style.backgroundImage = "url(#{@url})" + @URL = URL.createObjectURL blob + @nodes.el.style.backgroundImage = "url(#{@URL})" if c.toBlob c.toBlob applyBlob return @@ -524,7 +530,7 @@ QR = @nodes.label.hidden = true if QR.spoiler @showFileData() return unless window.URL - URL.revokeObjectURL @url + URL.revokeObjectURL @URL showFileData: (hide) -> if @file QR.nodes.filename.textContent = @filename