diff --git a/src/Images/ImageCommon.coffee b/src/Images/ImageCommon.coffee index b5ba44a48..869e45bfb 100644 --- a/src/Images/ImageCommon.coffee +++ b/src/Images/ImageCommon.coffee @@ -1,4 +1,17 @@ ImageCommon = + pushCache: (el) -> + ImageCommon.cache = el + $.on el, 'error', ImageCommon.cacheError + + popCache: -> + el = ImageCommon.cache + $.off el, 'error', ImageCommon.cacheError + delete ImageCommon.cache + el + + cacheError: -> + delete ImageCommon.cache if ImageCommon.cache is @ + decodeError: (file, post) -> return false unless file.error?.code is MediaError.MEDIA_ERR_DECODE unless message = $ '.warning', post.file.thumb.parentNode diff --git a/src/Images/ImageExpand.coffee b/src/Images/ImageExpand.coffee index 91f5a27b6..d39180018 100755 --- a/src/Images/ImageExpand.coffee +++ b/src/Images/ImageExpand.coffee @@ -142,7 +142,7 @@ ImageExpand = $.off el, eventName, cb $.rm el $.rmClass el, 'full-image' - ImageCommon.cache = el + ImageCommon.pushCache el expand: (post, src) -> # Do not expand images of hidden/filtered replies, or already expanded pictures. @@ -156,8 +156,7 @@ ImageExpand = if file.fullImage el = file.fullImage else if ImageCommon.cache?.dataset.fullID is post.fullID - el = file.fullImage = ImageCommon.cache - delete ImageCommon.cache + el = file.fullImage = ImageCommon.popCache() unless file.isHovered $.queueTask(-> el.src = el.src) if /\.gif$/.test el.src el.currentTime = 0 if isVideo and el.readyState >= el.HAVE_METADATA diff --git a/src/Images/ImageHover.coffee b/src/Images/ImageHover.coffee index 6a05de322..906da1106 100755 --- a/src/Images/ImageHover.coffee +++ b/src/Images/ImageHover.coffee @@ -7,23 +7,23 @@ ImageHover = cb: @node node: -> return unless @file?.isImage or @file?.isVideo - $.on @file.thumb, 'mouseover', ImageHover.mouseover - mouseover: (e) -> + $.on @file.thumb, 'mouseover', ImageHover.mouseover @ + mouseover: (post) -> (e) -> return unless doc.contains @ - post = Get.postFromNode @ {file} = post {isVideo} = file return if file.isExpanding or file.isExpanded file.isHovered = true + error = ImageHover.error post if ImageCommon.cache?.dataset.fullID is post.fullID - el = ImageCommon.cache - delete ImageCommon.cache + el = ImageCommon.popCache() + $.on el, 'error', error $.queueTask(-> el.src = el.src) if /\.gif$/.test el.src el.currentTime = 0 if isVideo and el.readyState >= el.HAVE_METADATA else el = $.el (if isVideo then 'video' else 'img') el.dataset.fullID = post.fullID - $.on el, 'error', ImageHover.error + $.on el, 'error', error el.src = file.URL el.id = 'ihover' $.after Header.hover, el @@ -51,19 +51,15 @@ ImageHover = if isVideo el.pause() $.rm el + $.off el, 'error', error el.removeAttribute 'id' el.removeAttribute 'style' - ImageCommon.cache = el + ImageCommon.pushCache el $.queueTask -> delete file.isHovered - error: -> - post = Get.postFromNode @ - return if post.file.isExpanding or post.file.isExpanded - if @id is 'ihover' # still hovering - return if ImageCommon.decodeError @, post - ImageCommon.error @, post, 3 * $.SECOND, (URL) => - if URL - @src = URL + if @src is URL then '?' + Date.now() else '' - else - $.rm @ - else - $.rm @ + error: (post) -> -> + return if ImageCommon.decodeError @, post + ImageCommon.error @, post, 3 * $.SECOND, (URL) => + if URL + @src = URL + if @src is URL then '?' + Date.now() else '' + else + $.rm @ diff --git a/src/Images/ImageLoader.coffee b/src/Images/ImageLoader.coffee index a2ee57f9e..97ce873ed 100755 --- a/src/Images/ImageLoader.coffee +++ b/src/Images/ImageLoader.coffee @@ -51,7 +51,7 @@ ImageLoader = video.dataset.md5 = thumb.dataset.md5 video.style[attr] = thumb.style[attr] for attr in ['height', 'width', 'maxHeight', 'maxWidth'] video.src = file.URL - $.on video, 'mouseover', ImageHover.mouseover if Conf['Image Hover'] + $.on video, 'mouseover', ImageHover.mouseover post if Conf['Image Hover'] $.replace thumb, video file.thumb = video file.videoThumb = true