events.js 878 B

12345678910111213141516171819202122232425262728
  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. @eventInProgress = { name: event, args: args }
  17. if callbacks = @_callbacks?[event]
  18. callback? args... for callback in callbacks.slice(0)
  19. @eventInProgress = null
  20. @trigger 'all', event, args... unless event is 'all'
  21. @
  22. removeEvent: (event) ->
  23. if @_callbacks?
  24. delete @_callbacks[name] for name in event.split(' ')
  25. @