mirror of
https://github.com/atom/atom.git
synced 2026-02-17 10:01:25 -05:00
DRY up subscribe and subscribeToCommand
subscribeToCommand now supports unsubscribing by object.
This commit is contained in:
@@ -1,23 +1,24 @@
|
||||
_ = require 'underscore'
|
||||
|
||||
module.exports =
|
||||
subscribe: (eventEmitter, subscribeArgs...) ->
|
||||
eventEmitter.on(subscribeArgs...)
|
||||
subscribeWith: (eventEmitter, methodName, args) ->
|
||||
eventEmitter[methodName](args...)
|
||||
|
||||
@subscriptions ?= []
|
||||
@subscriptionsByObject ?= new WeakMap
|
||||
@subscriptionsByObject.set(eventEmitter, []) unless @subscriptionsByObject.has(eventEmitter)
|
||||
|
||||
eventName = _.first(subscribeArgs)
|
||||
callback = _.last(subscribeArgs)
|
||||
eventName = _.first(args)
|
||||
callback = _.last(args)
|
||||
subscription = cancel: -> eventEmitter.off eventName, callback
|
||||
@subscriptions.push(subscription)
|
||||
@subscriptionsByObject.get(eventEmitter).push(subscription)
|
||||
|
||||
subscribeToCommand: (view, eventName, callback) ->
|
||||
view.command eventName, callback
|
||||
@subscriptions ?= []
|
||||
@subscriptions.push(cancel: -> view.off eventName, callback)
|
||||
subscribe: (eventEmitter, args...) ->
|
||||
@subscribeWith(eventEmitter, 'on', args)
|
||||
|
||||
subscribeToCommand: (eventEmitter, args...) ->
|
||||
@subscribeWith(eventEmitter, 'command', args)
|
||||
|
||||
unsubscribe: (object) ->
|
||||
if object?
|
||||
|
||||
Reference in New Issue
Block a user