diff --git a/src/Filtering/Filter.coffee b/src/Filtering/Filter.coffee index 2d62b6320..ba09d260f 100644 --- a/src/Filtering/Filter.coffee +++ b/src/Filtering/Filter.coffee @@ -246,19 +246,64 @@ Filter = re $.set type, save, cb + removeFilters: (type, res, cb) -> + $.get type, Conf[type], (item) -> + save = item[type] + res = res.map(Filter.escape).join('|') + save = save.replace RegExp("(?:$\n|^)(?:#{res})$", 'mg'), '' + $.set type, save, cb + + showFilters: (type) -> + # Open the settings and display & focus the relevant filter textarea. + Settings.open 'Filter' + section = $ '.section-container' + select = $ 'select[name=filter]', section + select.value = type + Settings.selectFilter.call select + $.onExists section, 'textarea', (ta) -> + tl = ta.textLength + ta.setSelectionRange tl, tl + ta.focus() + quickFilterMD5: -> post = Get.postFromNode @ files = post.files.filter((f) -> f.MD5) return unless files.length - Filter.addFilter 'MD5', files.map((f) -> "/#{f.MD5}/").join('\n') + filter = files.map((f) -> "/#{f.MD5}/").join('\n') + Filter.addFilter 'MD5', filter origin = post.origin or post if origin.isReply PostHiding.hide origin else if g.VIEW is 'index' ThreadHiding.hide origin.thread - # If post is still visible, give an indication that the MD5 was filtered. - if post.nodes.post.getBoundingClientRect().height - new Notice 'info', 'MD5 filtered.', 2 + {notice} = Filter.quickFilterMD5 + if notice + notice.filters.push filter + notice.posts.push origin + $('span', notice.el).textContent = "#{notice.filters.length} MD5s filtered." + else + msg = $.el 'div', + <%= html('MD5 filtered. [show] [undo]') %> + notice = Filter.quickFilterMD5.notice = new Notice 'info', msg, undefined, -> + delete Filter.quickFilterMD5.notice + notice.filters = [filter] + notice.posts = [origin] + links = $$ 'a', msg + $.on links[0], 'click', Filter.quickFilterCB.show.bind(notice) + $.on links[1], 'click', Filter.quickFilterCB.undo.bind(notice) + + quickFilterCB: + show: -> + Filter.showFilters 'MD5' + @close() + undo: -> + Filter.removeFilters 'MD5', @filters + for post in @posts + if post.isReply + PostHiding.show post + else if g.VIEW is 'index' + ThreadHiding.show post.thread + @close() escape: (value) -> value.replace /// @@ -347,13 +392,4 @@ Filter = ).join('\n') Filter.addFilter type, res, -> - # Open the settings and display & focus the relevant filter textarea. - Settings.open 'Filter' - section = $ '.section-container' - select = $ 'select[name=filter]', section - select.value = type - Settings.selectFilter.call select - $.onExists section, 'textarea', (ta) -> - tl = ta.textLength - ta.setSelectionRange tl, tl - ta.focus() + Filter.showFilters type