diff --git a/src/Filtering/Filter.coffee b/src/Filtering/Filter.coffee index 80df4cffd..386c8f083 100644 --- a/src/Filtering/Filter.coffee +++ b/src/Filtering/Filter.coffee @@ -64,6 +64,9 @@ Filter = else Conf['Stubs'] + # Desktop notification + noti = /notify/.test filter + # Highlight the post, or hide it. # If not specified, the highlight class will be filter-highlight. # Defaults to post hiding. @@ -82,7 +85,7 @@ Filter = else types = ['subject', 'name', 'filename', 'comment'] - filter = @createFilter regexp, boards, excludes, op, stub, hl, top + filter = @createFilter regexp, boards, excludes, op, stub, hl, top, noti if key is 'general' for type in types (@filters[type] or= []).push filter @@ -94,7 +97,7 @@ Filter = name: 'Filter' cb: @node - createFilter: (regexp, boards, excludes, op, stub, hl, top) -> + createFilter: (regexp, boards, excludes, op, stub, hl, top, noti) -> test = if typeof regexp is 'string' # MD5 checking @@ -103,10 +106,11 @@ Filter = (value) -> regexp.test value settings = - hide: !hl + hide: !(hl or noti) stub: stub class: hl top: top + noti: noti (value, boardID, isReply) -> if boards and boardID not in boards @@ -125,6 +129,7 @@ Filter = stub = true hl = undefined top = false + noti = false if QuoteYou.isYou(post) hideable = false for key of Filter.filters when ((value = Filter[key] post)?) @@ -138,14 +143,16 @@ Filter = unless hl and result.class in hl (hl or= []).push result.class top or= result.top + if result.noti + noti = true if hide {hide, stub} else - {hl, top} + {hl, top, noti} node: -> return if @isClone - {hide, stub, hl, top} = Filter.test @, (!@isFetchedQuote and (@isReply or g.VIEW is 'index')) + {hide, stub, hl, top, noti} = Filter.test @, (!@isFetchedQuote and (@isReply or g.VIEW is 'index')) if hide if @isReply PostHiding.hide @, stub @@ -155,7 +162,8 @@ Filter = if hl @highlights = hl $.addClass @nodes.root, hl... - return + if noti and Unread.posts and (@ID > Unread.lastReadPost) and not QuoteYou.isYou(@) + Unread.openNotification @, ' triggered a notification filter' isHidden: (post) -> !!Filter.test(post).hide diff --git a/src/General/Settings/Filter-guide.html b/src/General/Settings/Filter-guide.html index df0838609..911a9051f 100644 --- a/src/General/Settings/Filter-guide.html +++ b/src/General/Settings/Filter-guide.html @@ -30,6 +30,10 @@ Highlighted OPs will have their threads put on top of the board index by default.
For example: top:yes; or top:no;. +
  • + Show a desktop notification instead of hiding.
    + For example: notify;. +
  • Filters in the "General" section apply to multiple fields, by default subject,name,filename,comment.
    The fields can be specified with the type option, separated by commas.
    diff --git a/src/Monitoring/Unread.coffee b/src/Monitoring/Unread.coffee index 3e2aa740d..4f86c96f9 100644 --- a/src/Monitoring/Unread.coffee +++ b/src/Monitoring/Unread.coffee @@ -125,9 +125,9 @@ Unread = Unread.openNotification post return - openNotification: (post) -> + openNotification: (post, predicate=' replied to you') -> return unless Header.areNotificationsEnabled - notif = new Notification "#{post.info.nameBlock} replied to you", + notif = new Notification "#{post.info.nameBlock}#{predicate}", body: post.commentDisplay() icon: Favicon.logo notif.onclick = ->