diff --git a/builds/4chan-X.js b/builds/4chan-X.js index 2909abe0f..b17da4ab9 100644 --- a/builds/4chan-X.js +++ b/builds/4chan-X.js @@ -2968,7 +2968,7 @@ }, menu: { init: function() { - var apply, div, makeStub, replies, thisPost; + var apply, div, hideStubLink, makeStub, replies, thisPost; if (g.VIEW === 'catalog' || !Conf['Menu'] || !Conf['Reply Hiding Link']) { return; @@ -3029,7 +3029,12 @@ replies = $.el('label', { innerHTML: " Show replies" }); - return $.event('AddMenuEntry', { + hideStubLink = $.el('a', { + textContent: 'Hide stub', + href: 'javascript:;' + }); + $.on(hideStubLink, 'click', PostHiding.menu.hideStub); + $.event('AddMenuEntry', { type: 'post', el: div, order: 20, @@ -3061,6 +3066,26 @@ } ] }); + return $.event('AddMenuEntry', { + type: 'post', + el: hideStubLink, + order: 15, + open: function(post) { + var data; + + if (!post.isReply || post.isClone || !post.isHidden) { + return false; + } + if (!(data = PostHiding.db.get({ + boardID: post.board.ID, + threadID: post.thread.ID, + postID: post.ID + }))) { + return false; + } + return PostHiding.menu.post = post; + } + }); }, hide: function() { var makeStub, parent, post, replies, thisPost; @@ -3104,6 +3129,13 @@ PostHiding.saveHiddenState(post, !(thisPost && replies), !thisPost, data.makeStub, !replies); } return $.event('CloseMenu'); + }, + hideStub: function() { + var post; + + post = PostHiding.menu.post; + post.nodes.root.hidden = true; + $.event('CloseMenu'); } }, makeButton: function(post, type) { @@ -3360,7 +3392,7 @@ }, menu: { init: function() { - var apply, div, makeStub; + var apply, div, hideStubLink, makeStub; if (g.VIEW !== 'index' || !Conf['Menu'] || !Conf['Thread Hiding Link']) { return; @@ -3377,7 +3409,12 @@ makeStub = $.el('label', { innerHTML: " Make stub" }); - return $.event('AddMenuEntry', { + hideStubLink = $.el('a', { + textContent: 'Hide stub', + href: 'javascript:;' + }); + $.on(hideStubLink, 'click', ThreadHiding.menu.hideStub); + $.event('AddMenuEntry', { type: 'post', el: div, order: 20, @@ -3399,6 +3436,20 @@ } ] }); + return $.event('AddMenuEntry', { + type: 'post', + el: hideStubLink, + order: 15, + open: function(_arg) { + var isReply, thread; + + thread = _arg.thread, isReply = _arg.isReply; + if (isReply || !thread.isHidden) { + return false; + } + return ThreadHiding.menu.thread = thread; + } + }); }, hide: function() { var makeStub, thread; @@ -3408,6 +3459,13 @@ ThreadHiding.hide(thread, makeStub); ThreadHiding.saveHiddenState(thread, makeStub); return $.event('CloseMenu'); + }, + hideStub: function() { + var thread; + + thread = ThreadHiding.menu.thread; + ThreadHiding.hide(thread, false); + $.event('CloseMenu'); } }, makeButton: function(thread, type) { @@ -3461,9 +3519,6 @@ if (makeStub == null) { makeStub = Conf['Stubs']; } - if (thread.isHidden) { - return; - } OP = thread.OP; threadRoot = OP.nodes.root.parentNode; thread.isHidden = true; @@ -6605,7 +6660,7 @@ return $.event('AddMenuEntry', { type: 'post', el: a, - order: 70, + order: 100, open: function(_arg) { var file; diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js index bc9177f7a..a8d59e772 100644 --- a/builds/4chan-X.user.js +++ b/builds/4chan-X.user.js @@ -2964,7 +2964,7 @@ }, menu: { init: function() { - var apply, div, makeStub, replies, thisPost; + var apply, div, hideStubLink, makeStub, replies, thisPost; if (g.VIEW === 'catalog' || !Conf['Menu'] || !Conf['Reply Hiding Link']) { return; @@ -3025,7 +3025,12 @@ replies = $.el('label', { innerHTML: " Show replies" }); - return $.event('AddMenuEntry', { + hideStubLink = $.el('a', { + textContent: 'Hide stub', + href: 'javascript:;' + }); + $.on(hideStubLink, 'click', PostHiding.menu.hideStub); + $.event('AddMenuEntry', { type: 'post', el: div, order: 20, @@ -3057,6 +3062,26 @@ } ] }); + return $.event('AddMenuEntry', { + type: 'post', + el: hideStubLink, + order: 15, + open: function(post) { + var data; + + if (!post.isReply || post.isClone || !post.isHidden) { + return false; + } + if (!(data = PostHiding.db.get({ + boardID: post.board.ID, + threadID: post.thread.ID, + postID: post.ID + }))) { + return false; + } + return PostHiding.menu.post = post; + } + }); }, hide: function() { var makeStub, parent, post, replies, thisPost; @@ -3100,6 +3125,13 @@ PostHiding.saveHiddenState(post, !(thisPost && replies), !thisPost, data.makeStub, !replies); } return $.event('CloseMenu'); + }, + hideStub: function() { + var post; + + post = PostHiding.menu.post; + post.nodes.root.hidden = true; + $.event('CloseMenu'); } }, makeButton: function(post, type) { @@ -3356,7 +3388,7 @@ }, menu: { init: function() { - var apply, div, makeStub; + var apply, div, hideStubLink, makeStub; if (g.VIEW !== 'index' || !Conf['Menu'] || !Conf['Thread Hiding Link']) { return; @@ -3373,7 +3405,12 @@ makeStub = $.el('label', { innerHTML: " Make stub" }); - return $.event('AddMenuEntry', { + hideStubLink = $.el('a', { + textContent: 'Hide stub', + href: 'javascript:;' + }); + $.on(hideStubLink, 'click', ThreadHiding.menu.hideStub); + $.event('AddMenuEntry', { type: 'post', el: div, order: 20, @@ -3395,6 +3432,20 @@ } ] }); + return $.event('AddMenuEntry', { + type: 'post', + el: hideStubLink, + order: 15, + open: function(_arg) { + var isReply, thread; + + thread = _arg.thread, isReply = _arg.isReply; + if (isReply || !thread.isHidden) { + return false; + } + return ThreadHiding.menu.thread = thread; + } + }); }, hide: function() { var makeStub, thread; @@ -3404,6 +3455,13 @@ ThreadHiding.hide(thread, makeStub); ThreadHiding.saveHiddenState(thread, makeStub); return $.event('CloseMenu'); + }, + hideStub: function() { + var thread; + + thread = ThreadHiding.menu.thread; + ThreadHiding.hide(thread, false); + $.event('CloseMenu'); } }, makeButton: function(thread, type) { @@ -3457,9 +3515,6 @@ if (makeStub == null) { makeStub = Conf['Stubs']; } - if (thread.isHidden) { - return; - } OP = thread.OP; threadRoot = OP.nodes.root.parentNode; thread.isHidden = true; @@ -6626,7 +6681,7 @@ return $.event('AddMenuEntry', { type: 'post', el: a, - order: 70, + order: 100, open: function(_arg) { var file; diff --git a/builds/crx/script.js b/builds/crx/script.js index 80b4bb126..059392342 100644 --- a/builds/crx/script.js +++ b/builds/crx/script.js @@ -2967,7 +2967,7 @@ }, menu: { init: function() { - var apply, div, makeStub, replies, thisPost; + var apply, div, hideStubLink, makeStub, replies, thisPost; if (g.VIEW === 'catalog' || !Conf['Menu'] || !Conf['Reply Hiding Link']) { return; @@ -3028,7 +3028,12 @@ replies = $.el('label', { innerHTML: " Show replies" }); - return $.event('AddMenuEntry', { + hideStubLink = $.el('a', { + textContent: 'Hide stub', + href: 'javascript:;' + }); + $.on(hideStubLink, 'click', PostHiding.menu.hideStub); + $.event('AddMenuEntry', { type: 'post', el: div, order: 20, @@ -3060,6 +3065,26 @@ } ] }); + return $.event('AddMenuEntry', { + type: 'post', + el: hideStubLink, + order: 15, + open: function(post) { + var data; + + if (!post.isReply || post.isClone || !post.isHidden) { + return false; + } + if (!(data = PostHiding.db.get({ + boardID: post.board.ID, + threadID: post.thread.ID, + postID: post.ID + }))) { + return false; + } + return PostHiding.menu.post = post; + } + }); }, hide: function() { var makeStub, parent, post, replies, thisPost; @@ -3103,6 +3128,13 @@ PostHiding.saveHiddenState(post, !(thisPost && replies), !thisPost, data.makeStub, !replies); } return $.event('CloseMenu'); + }, + hideStub: function() { + var post; + + post = PostHiding.menu.post; + post.nodes.root.hidden = true; + $.event('CloseMenu'); } }, makeButton: function(post, type) { @@ -3359,7 +3391,7 @@ }, menu: { init: function() { - var apply, div, makeStub; + var apply, div, hideStubLink, makeStub; if (g.VIEW !== 'index' || !Conf['Menu'] || !Conf['Thread Hiding Link']) { return; @@ -3376,7 +3408,12 @@ makeStub = $.el('label', { innerHTML: " Make stub" }); - return $.event('AddMenuEntry', { + hideStubLink = $.el('a', { + textContent: 'Hide stub', + href: 'javascript:;' + }); + $.on(hideStubLink, 'click', ThreadHiding.menu.hideStub); + $.event('AddMenuEntry', { type: 'post', el: div, order: 20, @@ -3398,6 +3435,20 @@ } ] }); + return $.event('AddMenuEntry', { + type: 'post', + el: hideStubLink, + order: 15, + open: function(_arg) { + var isReply, thread; + + thread = _arg.thread, isReply = _arg.isReply; + if (isReply || !thread.isHidden) { + return false; + } + return ThreadHiding.menu.thread = thread; + } + }); }, hide: function() { var makeStub, thread; @@ -3407,6 +3458,13 @@ ThreadHiding.hide(thread, makeStub); ThreadHiding.saveHiddenState(thread, makeStub); return $.event('CloseMenu'); + }, + hideStub: function() { + var thread; + + thread = ThreadHiding.menu.thread; + ThreadHiding.hide(thread, false); + $.event('CloseMenu'); } }, makeButton: function(thread, type) { @@ -3460,9 +3518,6 @@ if (makeStub == null) { makeStub = Conf['Stubs']; } - if (thread.isHidden) { - return; - } OP = thread.OP; threadRoot = OP.nodes.root.parentNode; thread.isHidden = true; @@ -6605,7 +6660,7 @@ return $.event('AddMenuEntry', { type: 'post', el: a, - order: 70, + order: 100, open: function(_arg) { var file; diff --git a/src/Filtering/PostHiding.coffee b/src/Filtering/PostHiding.coffee index 14a6635ea..bffc1ed9b 100644 --- a/src/Filtering/PostHiding.coffee +++ b/src/Filtering/PostHiding.coffee @@ -64,6 +64,10 @@ PostHiding = innerHTML: ' This post' replies = $.el 'label', innerHTML: " Show replies" + hideStubLink = $.el 'a', + textContent: 'Hide stub' + href: 'javascript:;' + $.on hideStubLink, 'click', PostHiding.menu.hideStub $.event 'AddMenuEntry', type: 'post' @@ -79,6 +83,18 @@ PostHiding = replies.firstChild.checked = if data?.hideRecursively? then data.hideRecursively else Conf['Recursive Hiding'] true subEntries: [{el: apply}, {el: thisPost}, {el: replies}] + + $.event 'AddMenuEntry', + type: 'post' + el: hideStubLink + order: 15 + open: (post) -> + if !post.isReply or post.isClone or !post.isHidden + return false + unless data = PostHiding.db.get {boardID: post.board.ID, threadID: post.thread.ID, postID: post.ID} + return false + PostHiding.menu.post = post + hide: -> parent = @parentNode thisPost = $('input[name=thisPost]', parent).checked @@ -109,6 +125,11 @@ PostHiding = if data = PostHiding.db.get {boardID: post.board.ID, threadID: post.thread.ID, postID: post.ID} PostHiding.saveHiddenState post, !(thisPost and replies), !thisPost, data.makeStub, !replies $.event 'CloseMenu' + hideStub: -> + {post} = PostHiding.menu + post.nodes.root.hidden = true + $.event 'CloseMenu' + return makeButton: (post, type) -> a = $.el 'a', diff --git a/src/Filtering/ThreadHiding.coffee b/src/Filtering/ThreadHiding.coffee index f237cecf7..82541ed3e 100644 --- a/src/Filtering/ThreadHiding.coffee +++ b/src/Filtering/ThreadHiding.coffee @@ -71,6 +71,11 @@ ThreadHiding = makeStub = $.el 'label', innerHTML: " Make stub" + hideStubLink = $.el 'a', + textContent: 'Hide stub' + href: 'javascript:;' + $.on hideStubLink, 'click', ThreadHiding.menu.hideStub + $.event 'AddMenuEntry', type: 'post' el: div @@ -81,12 +86,27 @@ ThreadHiding = ThreadHiding.menu.thread = thread true subEntries: [el: apply; el: makeStub] + + $.event 'AddMenuEntry', + type: 'post' + el: hideStubLink + order: 15 + open: ({thread, isReply}) -> + if isReply or !thread.isHidden + return false + ThreadHiding.menu.thread = thread + hide: -> makeStub = $('input', @parentNode).checked {thread} = ThreadHiding.menu ThreadHiding.hide thread, makeStub ThreadHiding.saveHiddenState thread, makeStub $.event 'CloseMenu' + hideStub: -> + {thread} = ThreadHiding.menu + ThreadHiding.hide thread, false + $.event 'CloseMenu' + return makeButton: (thread, type) -> a = $.el 'a', @@ -122,7 +142,6 @@ ThreadHiding = ThreadHiding.saveHiddenState thread hide: (thread, makeStub=Conf['Stubs']) -> - return if thread.isHidden {OP} = thread threadRoot = OP.nodes.root.parentNode thread.isHidden = true diff --git a/src/Menu/DownloadLink.coffee b/src/Menu/DownloadLink.coffee index a50d4b677..a9e740929 100644 --- a/src/Menu/DownloadLink.coffee +++ b/src/Menu/DownloadLink.coffee @@ -8,7 +8,7 @@ DownloadLink = $.event 'AddMenuEntry', type: 'post' el: a - order: 70 + order: 100 open: ({file}) -> return false unless file a.href = file.URL