Code coverage report for code/views/dropdown-view.coffee

Statements: 0% (0 / 41)      Branches: 0% (0 / 8)      Functions: 0% (0 / 11)      Lines: 0% (0 / 26)      Ignored: none     

All files » code/views/ » dropdown-view.coffee
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53                                                                                                         
{div, i, span, ul, li} = React.DOM
 
DropdownItem = React.createFactory React.createClass
 
  displayName: 'DropdownItem'
 
  clicked: ->
    @props.select @props.item
 
  render: ->
    className = "menuItem #{if not @props.item.action then 'disabled' else ''}"
    (li {key: @props.item.name, className: className, onClick: @clicked }, @props.item.name)
 
module.exports = React.createClass
 
  displayName: 'Dropdown'
 
  getInitialState: ->
    showingMenu: false
    timeout: null
 
  blur: ->
    @unblur()
    timeout = setTimeout ( => @setState {showingMenu: false} ), 500
    @setState {timeout: timeout}
 
  unblur: ->
    if @state.timeout
      clearTimeout(@state.timeout)
    @setState {timeout: null}
 
  select: (item) ->
    nextState = (not @state.showingMenu)
    @setState {showingMenu: nextState}
    if item and item.action
      item.action()
 
  render: ->
    menuClass = if @state.showingMenu then 'menu-showing' else 'menu-hidden'
    select = (item) =>
      ( => @select(item))
    (div {className: 'menu'},
      (span {className: 'menu-anchor', onClick: => @select(null)},
        @props.anchor
        (i {className: 'fa fa-caret-down'})
      )
      (div {className: menuClass, onMouseLeave: @blur, onMouseEnter: @unblur},
        (ul {},
          (DropdownItem {key: item.name, item: item, select: @select}) for item in @props.items
        )
      )
    )