Sha256: d0d593f5dfb1e410b25d5403094e2741e4974955b68853f8f1982fe762ced7f3

Contents?: true

Size: 1.96 KB

Versions: 3

Compression:

Stored size: 1.96 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 'enterPress', '.select-result', (e) =>
      if @active
        if @selectOption @list.highlightedOption
          @trigger 'change', @selectedOption
      else
        @active = true
      null

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

  _bindListEvents: ->
    super

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

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

    @on 'searchEscapePress', '.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) if offsetToWindowBottom < listHeight
      @list.direction = 'down'

TaoComponent.register Tao.Form.Select.Element

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
tao_form-0.1.2 lib/assets/javascripts/tao/form/fields/select/element.coffee
tao_form-0.1.1 lib/assets/javascripts/tao/form/fields/select/element.coffee
tao_form-0.1.0 lib/assets/javascripts/tao/form/fields/select/element.coffee