overleaf/services/web/public/coffee/utils/EventEmitter.coffee

36 lines
849 B
CoffeeScript
Raw Normal View History

2014-07-08 11:02:26 +00: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 []
callback.callback(args...)
emit: (args...) -> @trigger(args...)