fix image error handling

This commit is contained in:
ccd0 2014-09-27 00:24:23 -07:00
parent 9fe9b373a2
commit a0e1268e60
4 changed files with 31 additions and 23 deletions

View File

@ -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

View File

@ -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

View File

@ -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 @

View File

@ -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