diff --git a/src/Imaging/FappeTyme.coffee b/src/Imaging/FappeTyme.coffee
deleted file mode 100644
index 20f51caee..000000000
--- a/src/Imaging/FappeTyme.coffee
+++ /dev/null
@@ -1,27 +0,0 @@
-FappeTyme =
- init: ->
- return if !Conf['Fappe Tyme'] or g.VIEW is 'catalog' or g.BOARD is 'f'
- el = $.el 'label',
- innerHTML: " Fappe Tyme"
- title: 'Fappe Tyme'
-
- FappeTyme.input = input = el.firstElementChild
-
- $.on input, 'change', FappeTyme.toggle
-
- $.event 'AddMenuEntry',
- type: 'header'
- el: el
- order: 97
-
- Post::callbacks.push
- name: 'Fappe Tyme'
- cb: @node
-
- node: ->
- return if @file
- $.addClass @nodes.root, "noFile"
-
- toggle: ->
- $.event 'CloseMenu'
- (if @checked then $.addClass else $.rmClass) doc, 'fappeTyme'
\ No newline at end of file
diff --git a/src/Imaging/ImageExpand.coffee b/src/Imaging/ImageExpand.coffee
deleted file mode 100644
index 87eb99755..000000000
--- a/src/Imaging/ImageExpand.coffee
+++ /dev/null
@@ -1,195 +0,0 @@
-ImageExpand =
- init: ->
- return if g.VIEW is 'catalog' or !Conf['Image Expansion']
-
- @EAI = $.el 'a',
- className: 'expand-all-shortcut'
- textContent: 'EAI'
- title: 'Expand All Images'
- href: 'javascript:;'
- $.on @EAI, 'click', ImageExpand.cb.toggleAll
- Header.addShortcut @EAI
-
- Post::callbacks.push
- name: 'Image Expansion'
- cb: @node
- node: ->
- return unless @file?.isImage
- {thumb} = @file
- $.on thumb.parentNode, 'click', ImageExpand.cb.toggle
- if @isClone and $.hasClass thumb, 'expanding'
- # If we clone a post where the image is still loading,
- # make it loading in the clone too.
- ImageExpand.contract @
- ImageExpand.expand @
- return
- if ImageExpand.on and !@isHidden
- ImageExpand.expand @
- cb:
- toggle: (e) ->
- return if e.shiftKey or e.altKey or e.ctrlKey or e.metaKey or e.button isnt 0
- e.preventDefault()
- ImageExpand.toggle Get.postFromNode @
- toggleAll: ->
- $.event 'CloseMenu'
- if ImageExpand.on = $.hasClass ImageExpand.EAI, 'expand-all-shortcut'
- ImageExpand.EAI.className = 'contract-all-shortcut'
- ImageExpand.EAI.title = 'Contract All Images'
- func = ImageExpand.expand
- else
- ImageExpand.EAI.className = 'expand-all-shortcut'
- ImageExpand.EAI.title = 'Expand All Images'
- func = ImageExpand.contract
- for ID, post of g.posts
- for post in [post].concat post.clones
- {file} = post
- continue unless file and file.isImage and doc.contains post.nodes.root
- if ImageExpand.on and
- (!Conf['Expand spoilers'] and file.isSpoiler or
- Conf['Expand from here'] and file.thumb.getBoundingClientRect().top < 0)
- continue
- $.queueTask func, post
- return
- setFitness: ->
- {checked} = @
- (if checked then $.addClass else $.rmClass) doc, @name.toLowerCase().replace /\s+/g, '-'
- return unless @name is 'Fit height'
- if checked
- $.on window, 'resize', ImageExpand.resize
- unless ImageExpand.style
- ImageExpand.style = $.addStyle null
- ImageExpand.resize()
- else
- $.off window, 'resize', ImageExpand.resize
-
- toggle: (post) ->
- {thumb} = post.file
- unless post.file.isExpanded or $.hasClass thumb, 'expanding'
- ImageExpand.expand post
- return
- ImageExpand.contract post
- rect = post.nodes.root.getBoundingClientRect()
- return unless rect.top <= 0 or rect.left <= 0
-
- {top} = rect
- if Conf['Fixed Header'] and not Conf['Bottom Header']
- headRect = Header.bar.getBoundingClientRect()
- top += - headRect.top - headRect.height
-
- root = <% if (type === 'crx') { %>d.body<% } else { %>doc<% } %>
-
- root.scrollTop += top if rect.top < 0
- root.scrollLeft = 0 if rect.left < 0
-
- contract: (post) ->
- $.rmClass post.nodes.root, 'expanded-image'
- $.rmClass post.file.thumb, 'expanding'
- post.file.isExpanded = false
-
- expand: (post, src) ->
- # Do not expand images of hidden/filtered replies, or already expanded pictures.
- {thumb} = post.file
- return if post.isHidden or post.file.isExpanded or $.hasClass thumb, 'expanding'
- $.addClass thumb, 'expanding'
- if post.file.fullImage
- # Expand already-loaded/ing picture.
- $.asap (-> post.file.fullImage.naturalHeight), ->
- ImageExpand.completeExpand post
- return
- post.file.fullImage = img = $.el 'img',
- className: 'full-image'
- src: src or post.file.URL
- $.on img, 'error', ImageExpand.error
- $.asap (-> post.file.fullImage.naturalHeight), ->
- ImageExpand.completeExpand post
- $.after thumb, img
-
- completeExpand: (post) ->
- {thumb} = post.file
- return unless $.hasClass thumb, 'expanding' # contracted before the image loaded
- post.file.isExpanded = true
- unless post.nodes.root.parentNode
- # Image might start/finish loading before the post is inserted.
- # Don't scroll when it's expanded in a QP for example.
- $.addClass post.nodes.root, 'expanded-image'
- $.rmClass post.file.thumb, 'expanding'
- return
- prev = post.nodes.root.getBoundingClientRect()
- $.queueTask ->
- $.addClass post.nodes.root, 'expanded-image'
- $.rmClass post.file.thumb, 'expanding'
- return unless prev.top + prev.height <= 0
- root = <% if (type === 'crx') { %>d.body<% } else { %>doc<% } %>
- curr = post.nodes.root.getBoundingClientRect()
- root.scrollTop += curr.height - prev.height + curr.top - prev.top
-
- error: ->
- post = Get.postFromNode @
- $.rm @
- delete post.file.fullImage
- # Images can error:
- # - before the image started loading.
- # - after the image started loading.
- unless $.hasClass(post.file.thumb, 'expanding') or $.hasClass post.nodes.root, 'expanded-image'
- # Don't try to re-expend if it was already contracted.
- return
- ImageExpand.contract post
-
- src = @src.split '/'
- if src[2] is 'images.4chan.org'
- if URL = Redirect.image src[3], src[5]
- setTimeout ImageExpand.expand, 10000, post, URL
- return
- if g.DEAD or post.isDead or post.file.isDead
- return
-
- timeoutID = setTimeout ImageExpand.expand, 10000, post
- # XXX CORS for images.4chan.org WHEN?
- $.ajax "//api.4chan.org/#{post.board}/res/#{post.thread}.json", onload: ->
- return if @status isnt 200
- for postObj in JSON.parse(@response).posts
- break if postObj.no is post.ID
- if postObj.no isnt post.ID
- clearTimeout timeoutID
- post.kill()
- else if postObj.filedeleted
- clearTimeout timeoutID
- post.kill true
-
- menu:
- init: ->
- return if g.VIEW is 'catalog' or !Conf['Image Expansion']
-
- el = $.el 'span',
- textContent: 'Image Expansion'
- className: 'image-expansion-link'
-
- {createSubEntry} = ImageExpand.menu
- subEntries = []
- for key, conf of Config.imageExpansion
- subEntries.push createSubEntry key, conf
-
- $.event 'AddMenuEntry',
- type: 'header'
- el: el
- order: 105
- subEntries: subEntries
-
- createSubEntry: (type, config) ->
- label = $.el 'label',
- innerHTML: " #{type}"
- input = label.firstElementChild
- if type in ['Fit width', 'Fit height']
- $.on input, 'change', ImageExpand.cb.setFitness
- if config
- label.title = config[1]
- input.checked = Conf[type]
- $.event 'change', null, input
- $.on input, 'change', $.cb.checked
- el: label
-
- resize: ->
- ImageExpand.style.textContent = ":root.fit-height .full-image {max-height:#{doc.clientHeight}px}"
-
- menuToggle: (e) ->
- ImageExpand.opmenu.toggle e, @, g
\ No newline at end of file
diff --git a/src/Imaging/ImageHover.coffee b/src/Imaging/ImageHover.coffee
deleted file mode 100644
index 639f37e0a..000000000
--- a/src/Imaging/ImageHover.coffee
+++ /dev/null
@@ -1,48 +0,0 @@
-ImageHover =
- init: ->
- return if g.VIEW is 'catalog' or !Conf['Image Hover']
-
- Post::callbacks.push
- name: 'Image Hover'
- cb: @node
- node: ->
- return unless @file?.isImage
- $.on @file.thumb, 'mouseover', ImageHover.mouseover
- mouseover: (e) ->
- post = Get.postFromNode @
- el = $.el 'img',
- id: 'ihover'
- src: post.file.URL
- el.setAttribute 'data-fullid', post.fullID
- $.add Header.hover, el
- UI.hover
- root: @
- el: el
- latestEvent: e
- endEvents: 'mouseout click'
- asapTest: -> el.naturalHeight
- $.on el, 'error', ImageHover.error
- error: ->
- return unless doc.contains @
- post = g.posts[@dataset.fullid]
-
- src = @src.split '/'
- if src[2] is 'images.4chan.org'
- if URL = Redirect.image src[3], src[5].replace /\?.+$/, ''
- @src = URL
- return
- if g.DEAD or post.isDead or post.file.isDead
- return
-
- timeoutID = setTimeout (=> @src = post.file.URL + '?' + Date.now()), 3000
- # XXX CORS for images.4chan.org WHEN?
- $.ajax "//api.4chan.org/#{post.board}/res/#{post.thread}.json", onload: ->
- return if @status isnt 200
- for postObj in JSON.parse(@response).posts
- break if postObj.no is post.ID
- if postObj.no isnt post.ID
- clearTimeout timeoutID
- post.kill()
- else if postObj.filedeleted
- clearTimeout timeoutID
- post.kill true
\ No newline at end of file
diff --git a/src/Imaging/ImageReplace.coffee b/src/Imaging/ImageReplace.coffee
deleted file mode 100644
index ffd53b88e..000000000
--- a/src/Imaging/ImageReplace.coffee
+++ /dev/null
@@ -1,21 +0,0 @@
-ImageReplace =
- init: ->
- return if g.VIEW is 'catalog'
-
- Post::callbacks.push
- name: 'Image Replace'
- cb: @node
-
- node: ->
- return if @isClone or @isHidden or @thread.isHidden or !@file?.isImage
- {thumb, URL} = @file
- return unless Conf["Replace #{if (type = (URL.match /\w{3}$/)[0].toUpperCase()) is 'PEG' then 'JPG' else type}"] and !/spoiler/.test thumb.src
- if @file.isSpoiler
- # Revealed spoilers do not have height/width set, this fixes auto-gifs dimensions.
- {style} = thumb
- style.maxHeight = style.maxWidth = if @isReply then '125px' else '250px'
- img = $.el 'img'
- $.on img, 'load', ->
- # Replace the thumbnail once the GIF has finished loading.
- thumb.src = URL
- img.src = URL
\ No newline at end of file
diff --git a/src/Imaging/RevealSpoilers.coffee b/src/Imaging/RevealSpoilers.coffee
deleted file mode 100644
index 99d4fbd21..000000000
--- a/src/Imaging/RevealSpoilers.coffee
+++ /dev/null
@@ -1,12 +0,0 @@
-RevealSpoilers =
- init: ->
- return if g.VIEW is 'catalog' or !Conf['Reveal Spoilers']
-
- Post::callbacks.push
- name: 'Reveal Spoilers'
- cb: @node
- node: ->
- return if @isClone or !@file?.isSpoiler
- {thumb} = @file
- thumb.removeAttribute 'style'
- thumb.src = @file.thumbURL
\ No newline at end of file