Sha256: 1a3e007f520f99296534e96dbda2c708cb0ae4389fdbad7d46bbef463b61740b

Contents?: true

Size: 1.22 KB

Versions: 6

Compression:

Stored size: 1.22 KB

Contents

# TODO bus as class
# TODO may be, settable maxInstances
# TODO tree presentative logic in eventName syntax provided by ':', '.', ...
# require underscore

class EventBus

  events: {}

  #constructor: ->

  bind: (eventName, callback) ->
    if @events[eventName]
      @events[eventName].push callback
    else
      @events[eventName] = [callback]
    true

  # TODO simplify logic
  unbind: (eventName, callback = null) ->
    if eventName
      if eventsHeap = @events[eventName]
        if callback
          i = _.indexOf eventsHeap, callback
          if i >= 0
            eventsHeap.splice i, 1
            true
          else
            false
        else
          delete @events[eventName]
      else
        false
    else
      if callback
        # TODO return boolean
        @unbind eventName, callback  for eventName, eventsHeap of @events
      else
        false

  has: (eventName, callback = null) ->
    if eventsHeap = @events[eventName]
      if callback
         _.include eventsHeap, callback
      else
        true
    else
      false

  trigger: (eventName, callbackArguments...) ->
    for callback in @events[eventName] or []
      callback.apply(@, callbackArguments)



# transitional instance
@bus = new EventBus

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
ultimate-base-0.2.4 app/assets/javascripts/ultimate/bus.js.coffee
ultimate-base-0.2.3.2 app/assets/javascripts/ultimate/bus.js.coffee
ultimate-base-0.2.3 app/assets/javascripts/ultimate/bus.js.coffee
ultimate-base-0.2.2 app/assets/javascripts/ultimate/bus.js.coffee
ultimate-base-0.2.1 app/assets/javascripts/ultimate/bus.js.coffee
ultimate-base-0.2.0 app/assets/javascripts/ultimate/bus.js.coffee