diff --git a/src/Filtering/ThreadHiding.coffee b/src/Filtering/ThreadHiding.coffee index e0ed48f41..2729945fa 100755 --- a/src/Filtering/ThreadHiding.coffee +++ b/src/Filtering/ThreadHiding.coffee @@ -1,13 +1,36 @@ ThreadHiding = init: -> - return if g.VIEW isnt 'index' or !Conf['Thread Hiding Buttons'] and !Conf['Thread Hiding Link'] - + return if g.VIEW is 'thread' or !Conf['Thread Hiding Buttons'] and !Conf['Thread Hiding Link'] @db = new DataBoard 'hiddenThreads' - @syncCatalog() + return @catalogHide() if g.VIEW is 'catalog' Thread.callbacks.push name: 'Thread Hiding' cb: @node + catalogHide: -> + @hiddenThreads = ThreadHiding.db.get + boardID: g.BOARD.ID + defaultValue: {} + @hiddenThreads[threadID] = true for threadID of @hiddenThreads + localStorage.setItem "4chan-hide-t-#{g.BOARD}", JSON.stringify @hiddenThreads + $.ready -> + new MutationObserver(ThreadHiding.catalogSave).observe $.id('threads'), + attributes: true + subtree: true + attributeFilter: ['style'] + + catalogSave: -> + hiddenThreads2 = JSON.parse localStorage.getItem "4chan-hide-t-#{g.BOARD}" + for threadID of hiddenThreads2 when !(threadID of ThreadHiding.hiddenThreads) + ThreadHiding.db.set + boardID: g.BOARD.ID + threadID: threadID + val: {makeStub: Conf['Stubs']} + for threadID of ThreadHiding.hiddenThreads when !(threadID of hiddenThreads2) + ThreadHiding.db.delete + boardID: g.BOARD.ID + threadID: threadID + node: -> if data = ThreadHiding.db.get {boardID: @board.ID, threadID: @ID} ThreadHiding.hide @, data.makeStub @@ -21,47 +44,6 @@ ThreadHiding = ThreadHiding.makeStub thread, root return - syncCatalog: -> - # Sync hidden threads from the catalog into the index. - hiddenThreads = ThreadHiding.db.get - boardID: g.BOARD.ID - defaultValue: {} - hiddenThreadsOnCatalog = JSON.parse(localStorage.getItem "4chan-hide-t-#{g.BOARD}") or {} - - # Add threads that were hidden in the catalog. - for threadID of hiddenThreadsOnCatalog - unless threadID of hiddenThreads - hiddenThreads[threadID] = {} - - # Remove threads that were un-hidden in the catalog. - for threadID of hiddenThreads - unless threadID of hiddenThreadsOnCatalog - delete hiddenThreads[threadID] - - if (ThreadHiding.db.data.lastChecked or 0) > Date.now() - $.MINUTE - # Was cleaned just now. - ThreadHiding.cleanCatalog hiddenThreadsOnCatalog - - ThreadHiding.db.set - boardID: g.BOARD.ID - val: hiddenThreads - - cleanCatalog: (hiddenThreadsOnCatalog) -> - # We need to clean hidden threads on the catalog ourselves, - # otherwise if we don't visit the catalog regularly - # it will pollute the localStorage and our data. - $.cache "//a.4cdn.org/#{g.BOARD}/threads.json", -> - return unless @status is 200 - threads = {} - for page in @response - for thread in page.threads - if thread.no of hiddenThreadsOnCatalog - threads[thread.no] = hiddenThreadsOnCatalog[thread.no] - if Object.keys(threads).length - localStorage.setItem "4chan-hide-t-#{g.BOARD}", JSON.stringify threads - else - localStorage.removeItem "4chan-hide-t-#{g.BOARD}" - menu: init: -> return if g.VIEW isnt 'index' or !Conf['Menu'] or !Conf['Thread Hiding Link'] @@ -161,19 +143,15 @@ ThreadHiding = $.prepend root, thread.stub saveHiddenState: (thread, makeStub) -> - hiddenThreadsOnCatalog = JSON.parse(localStorage.getItem "4chan-hide-t-#{g.BOARD}") or {} if thread.isHidden ThreadHiding.db.set boardID: thread.board.ID threadID: thread.ID val: {makeStub} - hiddenThreadsOnCatalog[thread] = true else ThreadHiding.db.delete boardID: thread.board.ID threadID: thread.ID - delete hiddenThreadsOnCatalog[thread] - localStorage.setItem "4chan-hide-t-#{g.BOARD}", JSON.stringify hiddenThreadsOnCatalog toggle: (thread) -> unless thread instanceof Thread diff --git a/src/General/Settings.coffee b/src/General/Settings.coffee index 88e13eb63..f7a0d4122 100755 --- a/src/General/Settings.coffee +++ b/src/General/Settings.coffee @@ -123,10 +123,7 @@ Settings = button.textContent = "Hidden: #{hiddenNum}" $.on button, 'click', -> @textContent = 'Hidden: 0' - $.get 'hiddenThreads', {}, ({hiddenThreads}) -> - for boardID of hiddenThreads.boards - localStorage.removeItem "4chan-hide-t-#{boardID}" - $.delete ['hiddenThreads', 'hiddenPosts'] + $.delete ['hiddenThreads', 'hiddenPosts'] $.after $('input[name="Stubs"]', section).parentNode.parentNode, div export: -> # Make sure to export the most recent data.