events.coffee 799 B

1234567891011121314151617181920212223242526
  1. @Events =
  2. on: (event, callback) ->
  3. if event.indexOf(' ') >= 0
  4. @on name, callback for name in event.split(' ')
  5. else
  6. ((@_callbacks ?= {})[event] ?= []).push callback
  7. @
  8. off: (event, callback) ->
  9. if event.indexOf(' ') >= 0
  10. @off name, callback for name in event.split(' ')
  11. else if (callbacks = @_callbacks?[event]) and (index = callbacks.indexOf callback) >= 0
  12. callbacks.splice index, 1
  13. delete @_callbacks[event] unless callbacks.length
  14. @
  15. trigger: (event, args...) ->
  16. if callbacks = @_callbacks?[event]
  17. callback? args... for callback in callbacks.slice(0)
  18. @trigger 'all', event, args... unless event is 'all'
  19. @
  20. removeEvent: (event) ->
  21. if @_callbacks?
  22. delete @_callbacks[name] for name in event.split(' ')
  23. @