From c0f4a85a2885bc7759e7288e17590f5ca3e7c772 Mon Sep 17 00:00:00 2001 From: ccd0 Date: Sat, 31 Jan 2015 00:40:26 -0800 Subject: [PATCH] Merge from Appchan X: src/Images --- src/Images/Gallery.coffee | 21 +++++++++++++-------- src/Images/ImageExpand.coffee | 19 +++++++++++-------- src/Images/ImageHover.coffee | 4 ++-- src/Images/ImageLoader.coffee | 27 ++++++++++++++++----------- src/Images/RevealSpoilers.coffee | 3 ++- src/Images/Sauce.coffee | 2 +- 6 files changed, 45 insertions(+), 31 deletions(-) diff --git a/src/Images/Gallery.coffee b/src/Images/Gallery.coffee index 51d21f9c1..b3c949d36 100644 --- a/src/Images/Gallery.coffee +++ b/src/Images/Gallery.coffee @@ -46,13 +46,13 @@ Gallery = nodes[key] = $ value, dialog for key, value of { buttons: '.gal-buttons' + frame: '.gal-image' name: '.gal-name' count: '.count' total: '.total' - frame: '.gal-image' + thumbs: '.gal-thumbnails' next: '.gal-image a' current: '.gal-image img' - thumbs: '.gal-thumbnails' } menuButton = $ '.menu-button', dialog @@ -79,8 +79,9 @@ Gallery = $.on d, 'keydown', cb.keybinds $.off d, 'keydown', Keybinds.keydown if Conf['Keybinds'] - for file in $$ '.post .file' when !$ '.fileDeletedRes, .fileDeleted', file + for file in $$ '.post .file' post = Get.postFromNode file + continue if !post.file or post.file.isDead Gallery.generateThumb post # If no image to open is given, pick image we have scrolled to. if !image and Gallery.fullIDs[post.fullID] @@ -136,9 +137,12 @@ Gallery = $.rmClass el, 'gal-highlight' if el = $ '.gal-highlight', nodes.thumbs $.addClass thumb, 'gal-highlight' - elType = 'img' - elType = 'video' if /\.webm$/.test(thumb.href) - elType = 'iframe' if /\.pdf$/.test(thumb.href) + elType = if /\.webm$/.test(thumb.href) + 'video' + else if /\.pdf$/.test(thumb.href) + 'iframe' + else + 'img' $[if elType is 'iframe' then 'addClass' else 'rmClass'] doc, 'gal-pdf' file = $.el elType, @@ -313,13 +317,14 @@ Gallery = createSubEntry: (name) -> label = UI.checkbox name, " #{name}" input = label.firstElementChild - $.on input, 'change', Gallery.cb.setFitness + if name in ['Fit Width', 'Fit Height', 'Hide Thumbnails'] + $.on input, 'change', Gallery.cb.setFitness $.event 'change', null, input $.on input, 'change', $.cb.checked el: label createSubEntries: -> - subEntries = ['Hide Thumbnails', 'Fit Width', 'Fit Height', 'Scroll to Post'].map Gallery.menu.createSubEntry + subEntries = (Gallery.menu.createSubEntry item for item in ['Hide Thumbnails', 'Fit Width', 'Fit Height', 'Scroll to Post']) delayLabel = $.el 'label', <%= html('Slide Delay: ') %> delayInput = delayLabel.firstElementChild diff --git a/src/Images/ImageExpand.coffee b/src/Images/ImageExpand.coffee index 02cc24b35..0e0e780c3 100755 --- a/src/Images/ImageExpand.coffee +++ b/src/Images/ImageExpand.coffee @@ -62,7 +62,7 @@ ImageExpand = if ImageExpand.on = $.hasClass ImageExpand.EAI, 'expand-all-shortcut' ImageExpand.EAI.className = 'contract-all-shortcut fa fa-compress' ImageExpand.EAI.title = 'Contract All Images' - func = (post) -> ImageExpand.expand post + func = ImageExpand.expand else ImageExpand.EAI.className = 'expand-all-shortcut fa fa-expand' ImageExpand.EAI.title = 'Expand All Images' @@ -74,19 +74,22 @@ ImageExpand = playVideos: (e) -> g.posts.forEach (post) -> - for post in [post, post.clones...] when post.file and post.file.isVideo and post.file.isExpanded - video = post.file.fullImage + for post in [post, post.clones...] + {file} = post + continue unless file and file.isVideo and file.isExpanded + + video = file.fullImage visible = Header.isNodeVisible video - if visible and post.file.wasPlaying - delete post.file.wasPlaying + if visible and file.wasPlaying + delete file.wasPlaying video.play() else if !visible and !video.paused - post.file.wasPlaying = true + file.wasPlaying = true video.pause() return setFitness: -> - (if @checked then $.addClass else $.rmClass) doc, @name.toLowerCase().replace /\s+/g, '-' + $[if @checked then 'addClass' else 'rmClass'] doc, @name.toLowerCase().replace /\s+/g, '-' toggle: (post) -> unless post.file.isExpanding or post.file.isExpanded @@ -218,7 +221,7 @@ ImageExpand = fullImage.controls = controls return fullImage.controls = false - $.asap (=> doc.contains fullImage), => + $.asap (-> doc.contains fullImage), -> if !d.hidden and Header.isNodeVisible fullImage fullImage.play() else diff --git a/src/Images/ImageHover.coffee b/src/Images/ImageHover.coffee index cfd8beb3f..3f3e8cb8b 100755 --- a/src/Images/ImageHover.coffee +++ b/src/Images/ImageHover.coffee @@ -7,7 +7,7 @@ ImageHover = cb: @node if Conf['Image Hover in Catalog'] CatalogThread.callbacks.push - name: 'Catalog Image Hover' + name: 'Image Hover' cb: @catalogNode node: -> @@ -44,7 +44,7 @@ ImageHover = el.controls = false el.muted = !Conf['Allow Sound'] el.play() if Conf['Autoplay'] - [width, height] = file.dimensions.split('x').map (x) -> +x + [width, height] = (+x for x in file.dimensions.split 'x') {left, right} = @getBoundingClientRect() padding = 16 maxWidth = Math.max left, doc.clientWidth - right diff --git a/src/Images/ImageLoader.coffee b/src/Images/ImageLoader.coffee index 86fffc7ca..69498e0c7 100755 --- a/src/Images/ImageLoader.coffee +++ b/src/Images/ImageLoader.coffee @@ -12,14 +12,7 @@ ImageLoader = g.posts.forEach ImageLoader.prefetch if Conf['Replace WEBM'] - $.on d, 'scroll visibilitychange 4chanXInitFinished PostsInserted', -> - # Special case: Quote previews are off screen when inserted into document, but quickly moved on screen. - qpClone = $.id('qp')?.firstElementChild - g.posts.forEach (post) -> - for post in [post, post.clones...] when post.file?.videoThumb - {thumb} = post.file - if Header.isNodeVisible(thumb) or post.nodes.root is qpClone then thumb.play() else thumb.pause() - return + $.on d, 'scroll visibilitychange 4chanXInitFinished PostsInserted', @playVideos return unless Conf['Image Prefetching'] @@ -27,9 +20,7 @@ ImageLoader = <%= html(' Prefetch Images') %> @el = prefetch.firstElementChild - $.on @el, 'change', -> - if Conf['prefetch'] = @checked - g.posts.forEach ImageLoader.prefetch + $.on @el, 'change', @toggle Header.menu.addEntry el: prefetch @@ -82,3 +73,17 @@ ImageLoader = clone.file.thumb.src = URL for clone in post.clones thumb.src = URL el.src = URL + + toggle: -> + if Conf['prefetch'] = @checked + g.posts.forEach ImageLoader.prefetch + return + + playVideos: -> + # Special case: Quote previews are off screen when inserted into document, but quickly moved on screen. + qpClone = $.id('qp')?.firstElementChild + g.posts.forEach (post) -> + for post in [post, post.clones...] when post.file?.videoThumb + {thumb} = post.file + if Header.isNodeVisible(thumb) or post.nodes.root is qpClone then thumb.play() else thumb.pause() + return diff --git a/src/Images/RevealSpoilers.coffee b/src/Images/RevealSpoilers.coffee index be93d4e2f..bfe88de21 100755 --- a/src/Images/RevealSpoilers.coffee +++ b/src/Images/RevealSpoilers.coffee @@ -1,8 +1,9 @@ RevealSpoilers = init: -> - return if g.VIEW not in ['index', 'thread'] or !Conf['Reveal Spoiler Thumbnails'] + return unless g.VIEW in ['index', 'thread'] and Conf['Reveal Spoiler Thumbnails'] Post.callbacks.push + name: 'Reveal Spoiler Thumbnails' cb: @node node: -> diff --git a/src/Images/Sauce.coffee b/src/Images/Sauce.coffee index a3568a3d7..ab46e2aa5 100755 --- a/src/Images/Sauce.coffee +++ b/src/Images/Sauce.coffee @@ -1,6 +1,6 @@ Sauce = init: -> - return if g.VIEW not in ['index', 'thread'] or !Conf['Sauce'] + return unless g.VIEW in ['index', 'thread'] and Conf['Sauce'] links = [] for link in Conf['sauces'].split '\n'