Merge pull request #4413 from atom/bo-notification-dismiss

Add dismissing to notifications
This commit is contained in:
Ben Ogle
2014-12-05 15:00:00 -08:00
6 changed files with 53 additions and 5 deletions

View File

@@ -98,7 +98,7 @@
"link": "0.28.0",
"markdown-preview": "0.110.0",
"metrics": "0.39.0",
"notifications": "0.7.0",
"notifications": "0.8.0",
"open-on-github": "0.31.0",
"package-generator": "0.33.0",
"release-notes": "0.36.0",

View File

@@ -16,3 +16,32 @@ describe "Notification", ->
it "returns the icon specified", ->
notification = new Notification('error', 'message!', icon: 'my-icon')
expect(notification.getIcon()).toBe 'my-icon'
describe "dismissing notifications", ->
describe "when the notfication is dismissable", ->
it "calls a callback when the notification is dismissed", ->
dismissedSpy = jasmine.createSpy()
notification = new Notification('error', 'message', dismissable: true)
notification.onDidDismiss dismissedSpy
expect(notification.isDismissable()).toBe true
expect(notification.isDismissed()).toBe false
notification.dismiss()
expect(dismissedSpy).toHaveBeenCalled()
expect(notification.isDismissed()).toBe true
describe "when the notfication is not dismissable", ->
it "does nothing when ::dismiss() is called", ->
dismissedSpy = jasmine.createSpy()
notification = new Notification('error', 'message')
notification.onDidDismiss dismissedSpy
expect(notification.isDismissable()).toBe false
expect(notification.isDismissed()).toBe true
notification.dismiss()
expect(dismissedSpy).not.toHaveBeenCalled()
expect(notification.isDismissed()).toBe true

View File

@@ -740,7 +740,7 @@ class Config
notifyFailure: (errorMessage, error) ->
message = "#{errorMessage}"
detail = error.stack
atom.notifications.addError(message, {detail, closable: true})
atom.notifications.addError(message, {detail, dismissable: true})
console.error message
console.error detail

View File

@@ -25,7 +25,7 @@ KeymapManager::loadUserKeymap = ->
KeymapManager::subscribeToFileReadFailure = ->
this.onDidFailToReadFile (error) ->
atom.notifications.addError('Failed to load keymap.cson', {detail: error.stack, closable: true})
atom.notifications.addError('Failed to load keymap.cson', {detail: error.stack, dismissable: true})
# This enables command handlers registered via jQuery to call
# `.abortKeyBinding()` on the `jQuery.Event` object passed to the handler.

View File

@@ -42,3 +42,9 @@ class NotificationManager
@notifications.push(notification)
@emitter.emit('did-add-notification', notification)
notification
###
Section: Getting Notifications
###
getNotifications: -> @notifications

View File

@@ -1,9 +1,16 @@
{Emitter} = require 'event-kit'
# Experimental: This will likely change, do not use.
module.exports =
class Notification
constructor: (@type, @message, @options={}) ->
@emitter = new Emitter
@timestamp = new Date()
@dismissed = true
@dismissed = false if @isDismissable()
onDidDismiss: (callback) ->
@emitter.on 'did-dismiss', callback
getOptions: -> @options
@@ -20,8 +27,14 @@ class Notification
and @getType() == other.getType() \
and @getDetail() == other.getDetail()
isClosable: ->
!!@options.closable
dismiss: ->
return unless @isDismissable() and not @isDismissed()
@dismissed = true
@emitter.emit 'did-dismiss'
isDismissed: -> @dismissed
isDismissable: -> !!@options.dismissable
getIcon: ->
return @options.icon if @options.icon?