Multifile support in Replace X / Image Prefetching. #2171

This commit is contained in:
ccd0 2019-07-15 21:29:01 -07:00
parent b86a2e917a
commit 976342c4c6

View File

@ -9,7 +9,7 @@ ImageLoader =
cb: @node cb: @node
$.on d, 'PostsInserted', -> $.on d, 'PostsInserted', ->
g.posts.forEach ImageLoader.prefetch g.posts.forEach ImageLoader.prefetchAll
if Conf['Replace WEBM'] if Conf['Replace WEBM']
$.on d, 'scroll visibilitychange 4chanXInitFinished PostsInserted', @playVideos $.on d, 'scroll visibilitychange 4chanXInitFinished PostsInserted', @playVideos
@ -27,12 +27,13 @@ ImageLoader =
order: 98 order: 98
node: -> node: ->
return if @isClone or !@file return if @isClone
ImageLoader.replaceVideo @ if Conf['Replace WEBM'] and @file.isVideo for file in @files
ImageLoader.prefetch @ ImageLoader.replaceVideo @, file if Conf['Replace WEBM'] and file.isVideo
ImageLoader.prefetch @, file
return
replaceVideo: (post) -> replaceVideo: (post, file) ->
{file} = post
{thumb} = file {thumb} = file
video = $.el 'video', video = $.el 'video',
preload: 'none' preload: 'none'
@ -49,9 +50,7 @@ ImageLoader =
file.thumb = video file.thumb = video
file.videoThumb = true file.videoThumb = true
prefetch: (post) -> prefetch: (post, file) ->
{file} = post
return unless file
{isImage, isVideo, thumb, url} = file {isImage, isVideo, thumb, url} = file
return if file.isPrefetched or !(isImage or isVideo) or post.isHidden or post.thread.isHidden return if file.isPrefetched or !(isImage or isVideo) or post.isHidden or post.thread.isHidden
type = if (match = url.match(/\.([^.]+)$/)[1].toUpperCase()) is 'JPEG' then 'JPG' else match type = if (match = url.match(/\.([^.]+)$/)[1].toUpperCase()) is 'JPEG' then 'JPG' else match
@ -75,16 +74,22 @@ ImageLoader =
thumb.src = url thumb.src = url
el.src = url el.src = url
prefetchAll: (post) ->
for file in post.files
ImageLoader.prefetch post, file
return
toggle: -> toggle: ->
if Conf['prefetch'] = @checked if Conf['prefetch'] = @checked
g.posts.forEach ImageLoader.prefetch g.posts.forEach ImageLoader.prefetchAll
return return
playVideos: -> playVideos: ->
# Special case: Quote previews are off screen when inserted into document, but quickly moved on screen. # Special case: Quote previews are off screen when inserted into document, but quickly moved on screen.
qpClone = $.id('qp')?.firstElementChild qpClone = $.id('qp')?.firstElementChild
g.posts.forEach (post) -> g.posts.forEach (post) ->
for post in [post, post.clones...] when post.file?.videoThumb for post in [post, post.clones...]
{thumb} = post.file for file in post.files when file.videoThumb
if Header.isNodeVisible(thumb) or post.nodes.root is qpClone then thumb.play() else thumb.pause() {thumb} = file
if Header.isNodeVisible(thumb) or post.nodes.root is qpClone then thumb.play() else thumb.pause()
return return