Sha256: 5d91cc9b5a42d2f40e567829c3a526f45d72ce8e85a80043b3a04f6de74be946

Contents?: true

Size: 1.93 KB

Versions: 5

Compression:

Stored size: 1.93 KB

Contents

#= require tao/form/shared/fields/select/element/base

class Tao.Form.Select.Element extends Tao.Form.Select.ElementBase

  _disconnected: ->
    super
    @_unbindDocumentMousedown()

  _bindResultEvents: ->
    super

    @on 'tao:enterPress', '.select-result', (e) =>
      if @active
        if @selectOption @list.highlightedOption
          @namespacedTrigger 'change', @selectedOption
      else
        @active = true
      null

    @on 'tao:arrowPress', '.select-result', (e, direction) =>
      if @active
        if direction == 'up'
          @list.highlightPrevOption()
        else
          @list.highlightNextOption()
      else
        @active = true
      null

  _bindListEvents: ->
    super

    @on 'tao:select', '.select-list', (e, option) =>
      @active = false
      null

    @on 'tao:show', '.select-list', (e) =>
      @_positionList()

    @on 'tao:cancel', '.select-list', (e) =>
      @active = false
      null

  _activeChanged: ->
    @list.active = @active
    @result.active = @active

    @_unbindDocumentMousedown()
    if @active
      @_bindDocumentMousedown()
    else
      @result.focus()

  _unbindDocumentMousedown: ->
    $(document).off "mousedown.tao-select-#{@taoId}"

  _bindDocumentMousedown: ->
    $(document).on "mousedown.tao-select-#{@taoId}", (e) =>
      return if $.contains(@, e.target) && !(@multiple && @result == e.target)
      @active = false
      @_unbindDocumentMousedown()

  _positionList: ->
    rect = @getBoundingClientRect()
    offsetToWindowTop = rect.top
    offsetToWindowBottom = $(window).height() - rect.bottom

    @list.setMaxHeight false
    @reflow()
    listHeight = @list.jq.outerHeight()

    if offsetToWindowBottom < listHeight && offsetToWindowTop > offsetToWindowBottom
      @list.setMaxHeight offsetToWindowTop - 20
      @list.direction = 'up'
    else
      @list.setMaxHeight offsetToWindowBottom - 20
      @list.direction = 'down'

TaoComponent.register Tao.Form.Select.Element

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
tao_form-0.2.3 lib/assets/javascripts/tao/form/fields/select/element.coffee
tao_form-0.2.2 lib/assets/javascripts/tao/form/fields/select/element.coffee
tao_form-0.2.1 lib/assets/javascripts/tao/form/fields/select/element.coffee
tao_form-0.2.0 lib/assets/javascripts/tao/form/fields/select/element.coffee
tao_form-0.1.10 lib/assets/javascripts/tao/form/fields/select/element.coffee