2014-07-08 07:02:26 -04:00
|
|
|
define [], () ->
|
|
|
|
class EventEmitter
|
|
|
|
on: (event, callback) ->
|
|
|
|
@events ||= {}
|
|
|
|
[event, namespace] = event.split(".")
|
|
|
|
@events[event] ||= []
|
|
|
|
@events[event].push {
|
|
|
|
callback: callback
|
|
|
|
namespace: namespace
|
|
|
|
}
|
|
|
|
|
|
|
|
off: (event) ->
|
|
|
|
@events ||= {}
|
|
|
|
if event?
|
|
|
|
[event, namespace] = event.split(".")
|
|
|
|
if !namespace?
|
|
|
|
# Clear all listeners for event
|
|
|
|
delete @events[event]
|
|
|
|
else
|
|
|
|
# Clear only namespaced listeners
|
|
|
|
remaining_events = []
|
|
|
|
for callback in @events[event] or []
|
|
|
|
if callback.namespace != namespace
|
|
|
|
remaining_events.push callback
|
|
|
|
@events[event] = remaining_events
|
|
|
|
else
|
|
|
|
# Remove all listeners
|
|
|
|
@events = {}
|
|
|
|
|
|
|
|
trigger: (event, args...) ->
|
|
|
|
@events ||= {}
|
|
|
|
for callback in @events[event] or []
|
2016-10-10 12:06:46 -04:00
|
|
|
callback.callback(args...)
|
|
|
|
|
|
|
|
emit: (args...) -> @trigger(args...)
|