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

Statements: 0% (0 / 75)      Branches: 0% (0 / 18)      Functions: 0% (0 / 30)      Lines: 0% (0 / 58)      Ignored: none     

All files » code/views/ » node-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 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160                                                                                                                                                                                                                                                                                                                               
{input, div, i, img} = React.DOM
tr = require "../utils/translate"
 
NodeTitle = React.createFactory React.createClass
  displayName: "NodeTitle"
  mixins: [require '../mixins/node-title']
  getDefaultProps: ->
 
 
  componentWillUnmount: ->
    if @props.isEditing
      @inputElm().off()
 
  componentDidUpdate: ->
    if @props.isEditing
      $elem =@inputElm()
      $elem.focus()
 
      $elem.off()
      enterKey = 13
      $elem.on "keyup", (e)=>
        if e.which is enterKey
          @finishEditing()
 
  inputElm: ->
    $(@refs.input.getDOMNode())
 
  inputValue: ->
    @inputElm().val()
 
  updateTitle: (e) ->
    newTitle = @cleanupTitle(@inputValue())
    @props.onChange(newTitle)
 
  finishEditing: ->
    @updateTitle()
    @props.onStopEditing()
 
  renderTitle: ->
    (div {className: "node-title", onClick: @props.onStartEditing }, @props.title)
 
  renderTitleInput: ->
    displayTitle = @displayTitleForInput(@props.title)
    (input {
      type: "text"
      ref: "input"
      className: "node-title"
      onChange: @updateTitle
      value: displayTitle
      maxlength: @maxTitleLength
      placeholder: @titlePlaceholder()
      onBlur: =>
        @finishEditing()
    })
 
  render: ->
    (div {className: 'node-title-box'},
      if @props.isEditing
        @renderTitleInput()
      else
        @renderTitle()
    )
 
module.exports = React.createClass
 
  displayName: "NodeView"
 
  componentDidMount: ->
    $elem = $(@refs.node.getDOMNode())
    $elem.draggable
      # grid: [ 10, 10 ]
      drag: @doMove
      stop: @doStop
      containment: "parent"
 
  getInitialState: ->
    editingNodeTitle: false
 
  handleSelected: (actually_select) ->
    if @props.selectionManager
      selectionKey = if actually_select then @props.nodeKey else "dont-select-anything"
      @props.selectionManager.selectForInspection(@props.data)
 
  propTypes:
    onDelete: React.PropTypes.func
    onMove: React.PropTypes.func
    onSelect: React.PropTypes.func
    nodeKey: React.PropTypes.string
 
  getDefaultProps: ->
    onMove:   -> log.info "internal move handler"
    onStop:   -> log.info "internal move handler"
    onDelete: -> log.info "internal on-delete handler"
    onSelect: -> log.info "internal select handler"
 
  doMove: (evt, extra) ->
    @props.onMove
      nodeKey: @props.nodeKey
      reactComponent: this
      domElement: @refs.node.getDOMNode()
      syntheticEvent: evt
      extra: extra
 
  doStop: (evt, extra) ->
    @props.onMoveComplete
      nodeKey: @props.nodeKey
      reactComponent: this
      domElement: @refs.node.getDOMNode()
      syntheticEvent: evt
      extra: extra
 
  doDelete: (evt) ->
    @props.onDelete
      nodeKey: @props.nodeKey
      reactComponent: this
      domElement: @refs.node.getDOMNode()
      syntheticEvent: evt
 
  changeTitle: (newTitle) ->
    @props.graphStore.startNodeEdit()
    log.info "Title is changing to #{newTitle}"
    @props.graphStore.changeNodeWithKey(@props.nodeKey, {title:newTitle})
 
  startEditing: ->
    @props.selectionManager.selectForTitleEditing(@props.data)
 
  stopEditing: ->
    @props.graphStore.endNodeEdit()
    @props.selectionManager.clearTitleEditing()
 
  isEditing: ->
    @props.selectionManager.isSelectedForTitleEditing(@props.data)
 
  render: ->
    style =
      top: @props.data.y
      left: @props.data.x
      "color": @props.data.color
    className = "elm"
    if @props.selected
      className = "#{className} selected"
    (div { className: className, ref: "node", style: style, "data-node-key": @props.nodeKey},
      (div {
        className: "img-background"
        onClick: (=> @handleSelected true)
        onTouchend: (=> @handleSelected true)
        },
        (if @props.data.image?.length > 0 and @props.data.image isnt "#remote" then (img {src: @props.data.image}) else null)
        if @props.selected
          (div {className: "connection-source", "data-node-key": @props.nodeKey})
      )
      (NodeTitle {
        isEditing: @props.editTitle
        title: @props.data.title
        onChange: @changeTitle
        onStopEditing: @stopEditing
        onStartEditing: @startEditing
      })
    )