| 1234567891011121314151617181920212223242526272829303132333435 |
- 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...)
|