Code coverage report for code/views/inspector-panel-view.coffee

Statements: 0% (0 / 93)      Branches: 0% (0 / 38)      Functions: 0% (0 / 17)      Lines: 0% (0 / 66)      Ignored: none     

All files » code/views/ » inspector-panel-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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141                                                                                                                                                                                                                                                                                         
NodeInspectorView = React.createFactory require './node-inspector-view'
LinkInspectorView = React.createFactory require './link-inspector-view'
PaletteInspectorView = React.createFactory require './palette-inspector-view'
LinkValueInspectorView = React.createFactory require './link-value-inspector-view'
NodeValueInspectorView = React.createFactory require './node-value-inspector-view'
LinkRelationInspectorView = React.createFactory require './relation-inspector-view'
NodeRelationInspectorView = React.createFactory require './relation-inspector-view'
 
{div, i, span} = React.DOM
 
ToolButton = React.createFactory React.createClass
  displayName: 'toolButton'
  render: ->
    name = @props.name
    onClick = =>
      @props.onClick(@props.name) if @props.onClick
 
    classes = "icon-#{name} tool-button"
    classes = "#{classes} selected" if @props.selected
    classes = "#{classes} disabled" if @props.disabled
    (div {className: classes, onClick: onClick})
 
ToolPanel = React.createFactory React.createClass
  displayName: 'toolPanel'
 
  buttonData: [
      # {name: "plus",  simple: true, shows: "add", 'enabled': ['nothing','node','link'] }
      {name: "brush", simple: true, shows: "design",'enabled': ['node','link'] }
      {name: "ruler", simple: false, shows: "value", 'enabled': ['node'] }
      {name: "curve", simple: false, shows: "relations",'enabled': ['node']}
    ]
 
  isDisabled: (button) ->
    return false if _.includes(button.enabled, 'nothing')
    return false if _.includes(button.enabled, 'node') and @props.node
    return false if _.includes(button.enabled, 'link') and @props.link
    return true
 
  buttonProps: (button) ->
    props =
      name:     button.name
      shows:    button.shows
      selected: false
      disabled: @isDisabled(button)
 
    unless @isDisabled(button)
      props.onClick = =>
        @select button.name
      props.selected = @props.nowShowing is button.shows
 
    props
 
  select: (name) ->
    button = _.find @buttonData, {name: name}
    if button
      if @props.nowShowing isnt button.shows
        @props.onNowShowing(button.shows)
      else
        @props.onNowShowing(null)
 
  render: ->
    buttons = @buttonData.slice 0
    if @props.simplified
      buttons = _.filter buttons, (button) -> button.simple
    buttonsView = _.map buttons, (button) =>
      props = @buttonProps(button)
      (ToolButton props)
 
    (div {className: 'tool-panel'}, buttonsView)
 
 
 
module.exports = React.createClass
 
  displayName: 'InspectorPanelView'
 
  getInitialState: ->
    nowShowing: null
 
  setShowing: (item) ->
    @setState(nowShowing: item)
 
 
  renderPaletteInspector: ->
    (PaletteInspectorView {
      palette: @props.palette,
      toggleImageBrowser: @props.toggleImageBrowser,
      graphStore: @props.graphStore
    })
 
  renderDesignInspector: ->
    if @props.node
      (NodeInspectorView {
        node: @props.node
        onNodeChanged: @props.onNodeChanged
        onNodeDelete: @props.onNodeDelete
        palette: @props.palette
      })
    else if @props.link
      (LinkInspectorView {link: @props.link,  graphStore: @props.graphStore})
 
  renderValueInspector: ->
    if @props.node
      (NodeValueInspectorView {node: @props.node, graphStore: @props.graphStore})
    else if @props.link
      (LinkValueInspectorView {link:@props.link})
 
  renderRelationInspector: ->
    if @props.node
      (NodeRelationInspectorView {node:@props.node, graphStore: @props.graphStore})
    else if @props.link
      (LinkRelationInspectorView {link:@props.link, graphStore: @props.graphStore})
 
 
  renderInspectorPanel: ->
    view = switch @state.nowShowing
      when 'add'       then @renderPaletteInspector()
      when 'design'    then @renderDesignInspector()
      when 'value'     then @renderValueInspector()
      when 'relations' then @renderRelationInspector()
 
    (div {className: "inspector-panel-content"},
      view
    )
 
  render: ->
    className = "inspector-panel"
    unless @state.nowShowing
      className = "#{className} collapsed"
 
    (div {className: className},
      (ToolPanel
        node: @props.node
        link: @props.link
        nowShowing: @state.nowShowing
        onNowShowing: @setShowing
        simplified: @props.simplified
      )
      @renderInspectorPanel()
    )