EventEmitter.coffee 849 B

1234567891011121314151617181920212223242526272829303132333435
  1. define [], () ->
  2. class EventEmitter
  3. on: (event, callback) ->
  4. @events ||= {}
  5. [event, namespace] = event.split(".")
  6. @events[event] ||= []
  7. @events[event].push {
  8. callback: callback
  9. namespace: namespace
  10. }
  11. off: (event) ->
  12. @events ||= {}
  13. if event?
  14. [event, namespace] = event.split(".")
  15. if !namespace?
  16. # Clear all listeners for event
  17. delete @events[event]
  18. else
  19. # Clear only namespaced listeners
  20. remaining_events = []
  21. for callback in @events[event] or []
  22. if callback.namespace != namespace
  23. remaining_events.push callback
  24. @events[event] = remaining_events
  25. else
  26. # Remove all listeners
  27. @events = {}
  28. trigger: (event, args...) ->
  29. @events ||= {}
  30. for callback in @events[event] or []
  31. callback.callback(args...)
  32. emit: (args...) -> @trigger(args...)