-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy patheventEmitter.coffee
More file actions
33 lines (27 loc) · 870 Bytes
/
eventEmitter.coffee
File metadata and controls
33 lines (27 loc) · 870 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# Simple EventEmitter for the client
# Adapted from https://github.com/arunoda/meteor-streams/blob/master/lib/ev.js
class EventEmitter
constructor: ->
@handlers = {}
emit: (event) ->
args = Array::slice.call(`arguments`, 1)
handler.apply(@, args) for handler in @handlers[event] if @handlers[event]
return
on: (event, callback) ->
@handlers[event] = [] unless @handlers[event]
@handlers[event].push(callback)
return
once: (event, callback) ->
@on event, onetimeCallback = ->
callback.apply(@, `arguments`)
@removeListener(event, onetimeCallback)
return
return
removeListener: (event, callback) ->
if @handlers[event]
index = @handlers[event].indexOf(callback)
@handlers[event].splice(index, 1)
return
removeAllListeners: (event) ->
@handlers[event] = `undefined`
return