From 0ea3c733a46952dda740ded956d90fc9f9cb0219 Mon Sep 17 00:00:00 2001 From: Mayhem Date: Wed, 19 Feb 2014 04:25:26 +0100 Subject: [PATCH] Hide threads like we hide them in the catalog. --- CHANGELOG.md | 12 +++++-- css/style.css | 8 ++--- src/Filtering/PostHiding.coffee | 64 ++++++++++++++++++++------------- src/General/Config.coffee | 3 +- src/General/Get.coffee | 2 +- src/General/Index.coffee | 40 ++++----------------- src/General/Post.coffee | 31 ++++++++-------- src/General/Thread.coffee | 29 +++------------ src/Menu/Labels.coffee | 3 +- 9 files changed, 83 insertions(+), 109 deletions(-) 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. + ### 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