Sha256: c32e1ccc8b45fcd8c27d569d2f6aba631f9f5af4c74be704d2ec518cf3413198

Contents?: true

Size: 1.53 KB

Versions: 71

Compression:

Stored size: 1.53 KB

Contents

define ->

  DropdownModel = Backbone.Model.extend
    select: ->
      @collection.each (model) =>
        model.set( 'selected', model == @ )
      @trigger('option-clicked',@)

  DropdownCollection = Backbone.Collection.extend
    model: DropdownModel

  DropdownView = Backbone.View.extend
    tagName: 'div'
    className: 'dropdown'

    events:
      "click .drop-indicator": 'clickedDrop'
      "click .button": 'clickedItem'

    initialize: ->
      @collection = new DropdownCollection()
      @collection.on 'all', _.bind(@render,@)
      
      # hackery :(
      $('body').on 'click', _.bind(@clickedOutsideDropdown,@)

    selectedModel: ->
      selected = @collection.find (m)-> m.get('selected')
      selected || @collection.at(0)
    unselectedModels: ->
      _(@collection.reject (m)-> m.get('selected'))

    createButtonFor: (model)->
      $("""<button>#{model.get('text')}</button>""")
        .on 'click', => @clickedItem(model)

    render: ->
      @$el
        .empty()
        .append( @createButtonFor(@selectedModel()) )
        .append( $ul = $("<ul>") )

      @unselectedModels().each (model)=>
        $ul.append( @createButtonFor(model) )

      @$el.append( """<div class="drop-indicator">v</div>""" )

    clickedDrop: (e)->
      e.stopPropagation() #prevent clickedOutsideDropdown from firing
      @$('ul').toggleClass('shown')

    clickedOutsideDropdown: ->
      @$('ul').removeClass('shown')

    clickedItem: (model)->
      model.select()




  {
    DropdownModel : DropdownModel
    DropdownView  : DropdownView
  }

Version data entries

71 entries across 54 versions & 5 rubygems

Version Path
rufus-0.8.2 RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/dropdown_control.coffee
rufus-0.8.2 RufusApp/Frank/frank_static_resources.bundle/js/dropdown_control.coffee
rufus-0.8.1 RufusApp/Frank/frank_static_resources.bundle/js/dropdown_control.coffee
rufus-0.8.1 RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/dropdown_control.coffee
rufus-0.8 RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/dropdown_control.coffee
rufus-0.8 RufusApp/Frank/frank_static_resources.bundle/js/dropdown_control.coffee
sc-frank-cucumber-1.2.1.1dcc760.debug frank-skeleton/frank_static_resources.bundle/js/dropdown_control.coffee
frank-cucumber-1.2.2 frank-skeleton/frank_static_resources.bundle/js/dropdown_control.coffee
sc-frank-cucumber-1.2.1.1dcc760 frank-skeleton/frank_static_resources.bundle/js/dropdown_control.coffee
sc-frank-cucumber-1.2.1.1dcc760 frank-skeleton/frank_static_resources.bundle/bundle/js/dropdown_control.coffee
sc-frank-cucumber-1.2.1.1dcc760 frank-skeleton/frank_static_resources.bundle/bundle/bundle/js/dropdown_control.coffee
frank-cucumber-1.2.1 frank-skeleton/frank_static_resources.bundle/js/dropdown_control.coffee
sc-frank-cucumber-1.2.1.902fa34 frank-skeleton/frank_static_resources.bundle/bundle/bundle/js/dropdown_control.coffee
sc-frank-cucumber-1.2.1.902fa34 frank-skeleton/frank_static_resources.bundle/js/dropdown_control.coffee
sc-frank-cucumber-1.2.1.902fa34 frank-skeleton/frank_static_resources.bundle/bundle/js/dropdown_control.coffee
sc-frank-cucumber-1.2.1.d2d00d2 frank-skeleton/frank_static_resources.bundle/js/dropdown_control.coffee
sc-frank-cucumber-1.2.1.c13cb90 frank-skeleton/frank_static_resources.bundle/js/dropdown_control.coffee
sc-frank-cucumber-1.2.1.00af28c frank-skeleton/frank_static_resources.bundle/js/dropdown_control.coffee
rufus-0.7 RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/dropdown_control.coffee
rufus-0.7 RufusApp/Frank/frank_static_resources.bundle/js/dropdown_control.coffee