Sha256: 2fd065789526168015f3940436b69e3236cb4bce7775439ec8d0e129774e4e52

Contents?: true

Size: 1.69 KB

Versions: 32

Compression:

Stored size: 1.69 KB

Contents

Spine  = @Spine or require('spine')
$      = Spine.$

class Spine.Manager extends Spine.Module
  @include Spine.Events

  constructor: ->
    @controllers = []
    @bind 'change', @change
    @add(arguments...)

  add: (controllers...) ->
    @addOne(cont) for cont in controllers

  addOne: (controller) ->
    controller.bind 'active', (args...) =>
      @trigger('change', controller, args...)
    controller.bind 'release', =>
      @controllers.splice(@controllers.indexOf(controller), 1)

    @controllers.push(controller)

  deactivate: ->
    @trigger('change', false, arguments...)

  # Private

  change: (current, args...) ->
    for cont in @controllers
      if cont is current
        cont.activate(args...)
      else
        cont.deactivate(args...)

Spine.Controller.include
  active: (args...) ->
    if typeof args[0] is 'function'
      @bind('active', args[0])
    else
      args.unshift('active')
      @trigger(args...)
    @

  isActive: ->
    @el.hasClass('active')

  activate: ->
    @el.addClass('active')
    @

  deactivate: ->
    @el.removeClass('active')
    @

class Spine.Stack extends Spine.Controller
  controllers: {}
  routes: {}

  className: 'spine stack'

  constructor: ->
    super

    @manager = new Spine.Manager

    for key, value of @controllers
      @[key] = new value(stack: @)
      @add(@[key])

    for key, value of @routes
      do (key, value) =>
        callback = value if typeof value is 'function'
        callback or= => @[value].active(arguments...)
        @route(key, callback)

    @[@default].active() if @default

  add: (controller) ->
    @manager.add(controller)
    @append(controller)

module?.exports = Spine.Manager
module?.exports.Stack = Spine.Stack

Version data entries

32 entries across 32 versions & 4 rubygems

Version Path
flipper-ui-0.2.0.beta2 lib/flipper/ui/assets/javascripts/spine/manager.coffee
flipper-ui-0.2.0.beta1 lib/flipper/ui/assets/javascripts/spine/manager.coffee
event_cal-2.0.2 vendor/assets/javascripts/lib/spinelib/manager.js.coffee
event_cal-2.0.1 vendor/assets/javascripts/lib/spinelib/manager.js.coffee
event_cal-2.0.0 vendor/assets/javascripts/lib/spinelib/manager.js.coffee
event_cal-1.3.0 vendor/assets/javascripts/lib/spinelib/manager.js.coffee
event_cal-1.2.5 vendor/assets/javascripts/lib/spinelib/manager.js.coffee
event_cal-1.2.4 vendor/assets/javascripts/lib/spinelib/manager.js.coffee
event_cal-1.2.3 vendor/assets/javascripts/lib/spinelib/manager.js.coffee
event_cal-1.2.2 vendor/assets/javascripts/lib/spinelib/manager.js.coffee
event_cal-1.2.1 vendor/assets/javascripts/lib/spinelib/manager.js.coffee
event_cal-1.2 vendor/assets/javascripts/lib/spinelib/manager.js.coffee
event_cal-1.1 vendor/assets/javascripts/lib/spinelib/manager.js.coffee
event_cal-1.0 vendor/assets/javascripts/lib/spinelib/manager.js.coffee
spinebox-0.0.15 lib/spinebox/templates/app/app/assets/javascripts/lib/spine/manager.coffee
spinebox-0.0.14 lib/spinebox/templates/app/app/assets/javascripts/lib/spine/manager.coffee
spinebox-0.0.13 lib/spinebox/templates/app/app/assets/javascripts/lib/spine/manager.coffee
scales-monitor-0.0.4 lib/scales-monitor/app/app/assets/javascripts/lib/spine/manager.coffee
spinebox-0.0.12 lib/spinebox/templates/app/app/assets/javascripts/lib/spine/manager.coffee
scales-monitor-0.0.1.beta.2 lib/scales-monitor/app/app/assets/javascripts/lib/spine/manager.coffee