diff --git a/CHANGELOG.md b/CHANGELOG.md
index f679b8ff2..9211c9e77 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,12 @@
-- The posts' menu now has a label entry listing the reasons why a post got hidden or highlighted.
-- `Thread Hiding` and `Reply Hiding` settings are merged into one: `Post Hiding`.
-- `Thread Hiding Link` and `Reply Hiding Link` settings are merged into one: `Post Hiding Link`.
+- Thread and post hiding changes:
+ - The posts' menu now has a label entry listing the reasons why a post got hidden or highlighted.
+ - `Thread Hiding` and `Reply Hiding` settings are merged into one: `Post Hiding`.
+ - `Thread Hiding Link` and `Reply Hiding Link` settings are merged into one: `Post Hiding Link`.
+ - Hiding a thread removes it from the index in `Paged` or `All threads` modes.
+
+
Hidden threads can be seen by clicking the `[Show]` button the the top of the index.
+
The `Anchor Hidden Threads` setting has been removed.
+
### 3.18.1 - *2014-02-20*
diff --git a/css/style.css b/css/style.css
index 89b7e1954..852f37b59 100644
--- a/css/style.css
+++ b/css/style.css
@@ -368,7 +368,6 @@ a[href="javascript:;"] {
:root.index-loading .navLinks,
:root.index-loading .board,
:root.index-loading .pagelist,
-:root:not(.catalog-mode) #hidden-toggle,
:root:not(.catalog-mode) #index-size {
display: none;
}
@@ -710,15 +709,12 @@ a.hide-announcement {
.hide-post-button,
.show-post-button {
font-size: 14px;
+ line-height: 12px; /* Prevent the floating effect from affecting the thumbnail too */
}
+.opContainer > .show-post-button,
.hide-post-button {
float: left;
margin-right: 3px;
- margin-bottom: -1em; /* Prevent the floating effect from affecting the thumbnail too */
-}
-.thread[hidden] + hr,
-.stub ~ * {
- display: none !important;
}
.stub input {
display: inline-block;
diff --git a/src/Filtering/PostHiding.coffee b/src/Filtering/PostHiding.coffee
index a1ae954f1..094f315f3 100644
--- a/src/Filtering/PostHiding.coffee
+++ b/src/Filtering/PostHiding.coffee
@@ -35,11 +35,12 @@ PostHiding =
@hide 'Manually hidden', data.makeStub, data.hideRecursively
return unless Conf['Post Hiding']
- a = PostHiding.makeButton true
if @isReply
+ a = PostHiding.makeButton true
+ a.hidden = true if @isHidden
$.replace $('.sideArrows', @nodes.root), a
else
- $.prepend @nodes.root, a
+ $.prepend @nodes.root, PostHiding.makeButton !@isHidden
makeButton: (hide) ->
a = (if hide then PostHiding.hideButton else PostHiding.showButton).cloneNode true
@@ -57,6 +58,10 @@ PostHiding =
else
post.hide 'Manually hidden'
PostHiding.saveHiddenState post
+ return if post.isReply
+ Index.updateHideLabel()
+ Index.sort()
+ Index.buildIndex()
saveHiddenState: (post, val) ->
data =
@@ -66,7 +71,7 @@ PostHiding =
if post.isHidden or val and !val.thisPost
data.val = val or {}
PostHiding.db.set data
- else
+ else if PostHiding.db.get data # unhiding a filtered post f.e.
PostHiding.db.delete data
menu:
@@ -83,22 +88,18 @@ PostHiding =
true
thisPost =
el: $.el 'label', innerHTML: ' This post'
- open: (post) -> post.isReply
replies =
el: $.el 'label', innerHTML: " Hide replies"
- open: (post) -> post.isReply
makeStub =
el: $.el 'label', innerHTML: " Make stub"
$.event 'AddMenuEntry',
type: 'post'
- el: $.el 'div', className: 'hide-post-link'
+ el: $.el 'div',
+ textContent: 'Hide post'
+ className: 'hide-post-link'
order: 20
- open: (post) ->
- if !post.isReply and g.VIEW isnt 'index' or Conf['Index Mode'] is 'catalog' and g.VIEW is 'index' or post.isClone or post.isHidden
- return false
- @el.textContent = if post.isReply then 'Hide reply' else 'Hide thread'
- true
+ open: (post) -> !(post.isHidden or !post.isReply or post.isClone)
subEntries: [apply, thisPost, replies, makeStub]
# Show
@@ -115,7 +116,7 @@ PostHiding =
@el.firstChild.checked = post.isHidden
true
replies =
- el: $.el 'label', innerHTML: " Unhide replies"
+ el: $.el 'label', innerHTML: ' Unhide replies'
open: (post) ->
data = PostHiding.db.get {boardID: post.board.ID, threadID: post.thread.ID, postID: post.ID}
@el.firstChild.checked = if 'hideRecursively' of data then data.hideRecursively else Conf['Recursive Hiding']
@@ -123,36 +124,49 @@ PostHiding =
$.event 'AddMenuEntry',
type: 'post'
- el: $.el 'div', className: 'show-post-link'
+ el: $.el 'div',
+ textContent: 'Unhide post'
+ className: 'show-post-link'
order: 20
open: (post) ->
- if !post.isReply or post.isClone or !post.isHidden
+ if !post.isHidden or !post.isReply or post.isClone
return false
unless PostHiding.db.get {boardID: post.board.ID, threadID: post.thread.ID, postID: post.ID}
return false
- @el.textContent = if post.isReply then 'Unhide reply' else 'Unhide thread'
true
subEntries: [apply, thisPost, replies]
+
+ return if g.VIEW isnt 'index'
+ $.event 'AddMenuEntry',
+ type: 'post'
+ el: $.el 'a', href: 'javascript:;'
+ order: 20
+ open: (post) ->
+ @el.textContent = if post.isHidden
+ 'Unhide thread'
+ else
+ 'Hide thread'
+ $.off @el, 'click', @cb if @cb
+ @cb = ->
+ $.event 'CloseMenu'
+ PostHiding.toggle post
+ $.on @el, 'click', @cb
+ true
+
hide: (post) ->
parent = @parentNode
- thisPost = $('input[name=thisPost]', parent).checked if post.isReply
- replies = $('input[name=replies]', parent).checked if post.isReply
+ thisPost = $('input[name=thisPost]', parent).checked
+ replies = $('input[name=replies]', parent).checked
makeStub = $('input[name=makeStub]', parent).checked
label = 'Manually hidden'
- if !post.isReply
- post.hide label, makeStub
- else if thisPost
+ if thisPost
post.hide label, makeStub, replies
else if replies
Recursive.apply 'hide', post, label, makeStub, true
Recursive.add 'hide', post, label, makeStub, true
else
return
- val = if post.isReply
- {thisPost, hideRecursively: replies, makeStub}
- else
- {makeStub}
- PostHiding.saveHiddenState post, val
+ PostHiding.saveHiddenState post, {thisPost, hideRecursively: replies, makeStub}
$.event 'CloseMenu'
show: (post) ->
parent = @parentNode
diff --git a/src/General/Config.coffee b/src/General/Config.coffee
index 8fa17b54a..354fb7365 100644
--- a/src/General/Config.coffee
+++ b/src/General/Config.coffee
@@ -18,7 +18,7 @@ Config =
'Anonymize': [false, 'Make everyone Anonymous.']
'Filter': [true, 'Self-moderation placebo.']
'Post Hiding': [true, 'Add buttons to hide threads and replies.']
- 'Stubs': [true, 'Show stubs of hidden threads / replies.']
+ 'Stubs': [true, 'Show stubs of hidden threads and replies.']
'Recursive Hiding': [true, 'Hide replies of hidden posts, recursively.']
'Images':
'Auto-GIF': [false, 'Animate GIF thumbnails (disabled on /gif/, /wsg/).']
@@ -141,7 +141,6 @@ Config =
'Threads per Page': 0
'Open threads in a new tab': false
'Show Replies': true
- 'Anchor Hidden Threads': true
'Refreshed Navigation': false
Header:
'Header auto-hide': false
diff --git a/src/General/Get.coffee b/src/General/Get.coffee
index d888643d6..6ba9afca1 100644
--- a/src/General/Get.coffee
+++ b/src/General/Get.coffee
@@ -232,6 +232,6 @@ Get =
thread = g.threads["#{boardID}.#{threadID}"] or
new Thread threadID, board
post = new Post Build.post(o, true), thread, board, {isArchived: true}
- $('.page-num', post.nodes.info).hidden = true
+ $('.page-num', post.nodes.info).hidden = true unless post.isReply
Main.callbackNodes Post, [post]
Get.insert post, root, context
diff --git a/src/General/Index.coffee b/src/General/Index.coffee
index f54317b8d..577bc48ad 100644
--- a/src/General/Index.coffee
+++ b/src/General/Index.coffee
@@ -38,15 +38,11 @@ Index =
repliesEntry =
el: $.el 'label',
innerHTML: ' Show replies'
- anchorEntry =
- el: $.el 'label',
- innerHTML: ' Anchor hidden threads'
- title: 'Move hidden threads at the end of the index.'
refNavEntry =
el: $.el 'label',
innerHTML: ' Refreshed navigation'
title: 'Refresh index when navigating through pages.'
- for label in [targetEntry, repliesEntry, anchorEntry, refNavEntry]
+ for label in [targetEntry, repliesEntry, refNavEntry]
input = label.el.firstChild
{name} = input
input.checked = Conf[name]
@@ -56,15 +52,13 @@ Index =
$.on input, 'change', @cb.target
when 'Show Replies'
$.on input, 'change', @cb.replies
- when 'Anchor Hidden Threads'
- $.on input, 'change', @cb.sort
$.event 'AddMenuEntry',
type: 'header'
el: $.el 'span',
textContent: 'Index Navigation'
order: 90
- subEntries: [threadNumEntry, targetEntry, repliesEntry, anchorEntry, refNavEntry]
+ subEntries: [threadNumEntry, targetEntry, repliesEntry, refNavEntry]
$.addClass doc, 'index-loading'
@update()
@@ -124,24 +118,7 @@ Index =
$.event 'AddMenuEntry',
type: 'post'
el: $.el 'a', href: 'javascript:;'
- order: 5
- open: (post) ->
- return false if Conf['Index Mode'] isnt 'catalog'
- @el.textContent = if post.isHidden
- 'Unhide thread'
- else
- 'Hide thread'
- $.off @el, 'click', @cb if @cb
- @cb = ->
- $.event 'CloseMenu'
- PostHiding.toggle post
- $.on @el, 'click', @cb
- true
-
- $.event 'AddMenuEntry',
- type: 'post'
- el: $.el 'a', href: 'javascript:;'
- order: 6
+ order: 19
open: ({thread}) ->
return false if Conf['Index Mode'] isnt 'catalog'
@el.textContent = if thread.isPinned
@@ -573,9 +550,7 @@ Index =
Main.handleErrors errors if errors
Main.callbackNodes Post, posts
buildCatalogViews: ->
- threads = Index.sortedNodes
- .map (threadRoot) -> Get.threadFromRoot threadRoot
- .filter (thread) -> !thread.isHidden isnt Index.showHiddenThreads
+ threads = Index.sortedNodes.map (threadRoot) -> Get.threadFromRoot threadRoot
catalogThreads = []
for thread in threads when !thread.catalogView
catalogThreads.push new CatalogThread Build.catalogThread(thread), thread
@@ -608,16 +583,15 @@ Index =
sortedThreadIDs = [Index.liveThreadData...].sort((a, b) -> b.replies - a.replies).map (data) -> data.no
when 'filecount'
sortedThreadIDs = [Index.liveThreadData...].sort((a, b) -> b.images - a.images).map (data) -> data.no
- Index.sortedNodes = sortedThreadIDs.map (threadID) ->
- Index.nodes[Index.liveThreadIDs.indexOf threadID]
+ Index.sortedNodes = sortedThreadIDs
+ .map (threadID) -> Index.nodes[Index.liveThreadIDs.indexOf threadID]
+ .filter (threadRoot) -> Get.threadFromRoot(threadRoot).isHidden is Index.showHiddenThreads
if Index.isSearching
Index.sortedNodes = Index.querySearch(Index.searchInput.value) or Index.sortedNodes
# Sticky threads
Index.sortOnTop (thread) -> thread.isSticky
# Highlighted threads
Index.sortOnTop (thread) -> thread.isOnTop or thread.isPinned
- # Non-hidden threads
- Index.sortOnTop((thread) -> !thread.isHidden) if Conf['Anchor Hidden Threads']
sortOnTop: (match) ->
offset = 0
for threadRoot, i in Index.sortedNodes when match Get.threadFromRoot threadRoot
diff --git a/src/General/Post.coffee b/src/General/Post.coffee
index d836c91d1..3d4ebe90d 100644
--- a/src/General/Post.coffee
+++ b/src/General/Post.coffee
@@ -163,8 +163,10 @@ class Post
@labels.push label unless label in @labels
return if @isHidden
@isHidden = true
+ for quotelink in Get.allQuotelinksLinkingTo @
+ $.addClass quotelink, 'filtered'
if !@isReply
- @thread.hide makeStub
+ @thread.hide()
return
if hideRecursively
@@ -172,18 +174,18 @@ class Post
Recursive.apply 'hide', @, label, makeStub, true
Recursive.add 'hide', @, label, makeStub, true
- for quotelink in Get.allQuotelinksLinkingTo @
- $.addClass quotelink, 'filtered'
-
unless makeStub
@nodes.root.hidden = true
return
- a = PostHiding.makeButton false
- $.add a, $.tn " #{@getNameBlock()}"
+ @nodes.post.hidden = true
+ @nodes.post.previousElementSibling.hidden = true
@nodes.stub = $.el 'div',
className: 'stub'
- $.add @nodes.stub, a
+ $.add @nodes.stub, [
+ PostHiding.makeButton false
+ $.tn " #{@getNameBlock()}"
+ ]
$.add @nodes.stub, Menu.makeButton() if Conf['Menu']
$.prepend @nodes.root, @nodes.stub
show: (showRecursively=Conf['Recursive Hiding']) ->
@@ -192,6 +194,8 @@ class Post
@labels = @labels.filter (label) ->
# This is lame.
!/^(Manually hidden|Recursively hidden|Hidden by)/.test label
+ for quotelink in Get.allQuotelinksLinkingTo @
+ $.rmClass quotelink, 'filtered'
if !@isReply
@thread.show()
return
@@ -200,14 +204,13 @@ class Post
Recursive.apply 'show', @, true
Recursive.rm 'hide', @
- for quotelink in Get.allQuotelinksLinkingTo @
- $.rmClass quotelink, 'filtered'
-
- if @nodes.stub
- $.rm @nodes.stub
- delete @nodes.stub
- else
+ unless @nodes.stub
@nodes.root.hidden = false
+ return
+ @nodes.post.hidden = false
+ @nodes.post.previousElementSibling.hidden = false
+ $.rm @nodes.stub
+ delete @nodes.stub
highlight: (label, highlight, top) ->
@labels.push label
unless highlight in @highlights
diff --git a/src/General/Thread.coffee b/src/General/Thread.coffee
index 4d5fda36f..7d285d520 100644
--- a/src/General/Thread.coffee
+++ b/src/General/Thread.coffee
@@ -62,35 +62,16 @@ class Thread
@isPinned = false
$.rmClass @catalogView.nodes.root, 'pinned' if @catalogView
- hide: (makeStub=Conf['Stubs']) ->
+ hide: ->
return if @isHidden
@isHidden = true
- root = @OP.nodes.root.parentNode
- Index.updateHideLabel()
- $.rm @catalogView.nodes.root if @catalogView
-
- unless makeStub
- root.hidden = true
- return
-
- @stub = $.el 'div',
- className: 'stub'
- {replies} = Index.liveThreadData[Index.liveThreadIDs.indexOf @ID]
- $.add @stub, [
- PostHiding.makeButton false
- $.tn " #{@OP.getNameBlock()} (#{replies} repl#{if replies is 1 then 'y' else 'ies'})"
- ]
- $.add @stub, Menu.makeButton() if Conf['Menu']
- $.prepend root, @stub
+ if button = $ '.hide-post-button', @OP.nodes.root
+ $.replace button, PostHiding.makeButton false
show: ->
return if !@isHidden
@isHidden = false
- if @stub
- $.rm @stub
- delete @stub
- @OP.nodes.root.parentNode.hidden = false
- Index.updateHideLabel()
- $.rm @catalogView.nodes.root if @catalogView
+ if button = $ '.show-post-button', @OP.nodes.root
+ $.replace button, PostHiding.makeButton true
kill: ->
@isDead = true
diff --git a/src/Menu/Labels.coffee b/src/Menu/Labels.coffee
index 15877b5a8..726377b7d 100644
--- a/src/Menu/Labels.coffee
+++ b/src/Menu/Labels.coffee
@@ -6,7 +6,8 @@ Labels =
type: 'post'
el: $.el 'div', textContent: 'Labels'
order: 60
- open: ({labels}, addSubEntry) ->
+ open: (post, addSubEntry) ->
+ {labels} = post.origin or post
return false unless labels.length
@subEntries.length = 0
for label in labels