Code coverage report for code/mixins/app-view.coffee

Statements: 0% (0 / 79)      Branches: 0% (0 / 22)      Functions: 0% (0 / 19)      Lines: 0% (0 / 61)      Ignored: none     

All files » code/mixins/ » app-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                                                                                                                                                                                                                                     
Simulation   = require "../models/simulation"
PaletteStore = require "../stores/palette-store"
CodapStore   = require "../stores/codap-store"
 
module.exports =
 
  getInitialAppViewState: (subState) ->
    mixinState =
      selectedNode: null
      selectedConnection: null
      palette: []
      filename: null
      undoRedoShowing: true
    _.extend mixinState, subState
 
  componentDidUpdate: ->
    log.info 'Did Update: AppView'
 
  addDeleteKeyHandler: (add) ->
    if add
      deleteFunction = @props.graphStore.deleteSelected.bind @props.graphStore
      $(window).on 'keydown', (e) ->
        if e.which is 8 and not $(e.target).is('input, textarea')
          e.preventDefault()
          deleteFunction()
    else
      $(window).off 'keydown'
 
  componentDidMount: ->
    @addDeleteKeyHandler true
    @props.graphStore.selectionManager.addSelectionListener @_updateSelection
 
    @props.graphStore.addFilenameListener (filename) =>
      @setState filename: filename
 
    @_loadInitialData()
    @_registerUndoRedoKeys()
    PaletteStore.store.listen @onPaletteChange
    CodapStore.store.listen @onCodapStateChange
 
  componentDidUnmount: ->
    @addDeleteKeyHandler false
 
  onPaletteChange: (status) ->
    @setState
      palette: status.palette
      internalLibrary: status.internalLibrary
 
  onCodapStateChange: (status) ->
    @setState
      undoRedoShowing: not status.hideUndoRedo
 
  getData: ->
    @props.graphStore.toJsonString @state.palette
 
  onNodeChanged: (node, data) ->
    @props.graphStore.changeNode data
 
  onNodeDelete: ->
    @props.graphStore.deleteSelected()
 
  runSimulation: ->
    simulator = new Simulation
      nodes: @props.graphStore.getNodes()
      duration: 10
      timeStep: 1
      reportFunc: (report) =>
        log.info report
        nodeInfo = (
          _.map report.endState, (n) ->
            "#{n.title} #{n.initialValue} → #{n.value}"
        ).join("\n")
        log.info "Run for #{report.steps} steps\n#{nodeInfo}:"
        @props.codapConnect.sendSimulationData(report)
 
    simulator.run()
    simulator.report()
 
  # Update Selections. #TODO Move elsewhere
  _updateSelection: (manager) ->
    selectedNode = manager.getInspection()[0] or null
    editingNode  = manager.getTitleEditing()[0] or null
    selectedLink = manager.getLinkSelection()[0] or null
 
    @setState
      selectedNode: selectedNode
      editingNode: editingNode
      selectedLink: selectedLink
 
  _loadInitialData: ->
    if @props.data?.length > 0
      @props.graphStore.loadData JSON.parse @props.data
    else if @props.url?.length > 0
      @props.graphStore.loadDataFromUrl @props.url
 
  # cross platform undo/redo key-binding ctr-z ctr-y
  _registerUndoRedoKeys: ->
    ($ window).on 'keydown', (e) =>
      y = (e.keyCode is 89) or (e.keyCode is 121)
      z = (e.keyCode is 90) or (e.keyCode is 122)
      return if not (y or z)
      if e.metaKey
        undo = z and not e.shiftKey
        redo = (z and e.shiftKey) or y
      else if e.ctrlKey
        undo = z
        redo = y
      else
        undo = redo = false
      if undo or redo
        if (@state.undoRedoShowing)
          e.preventDefault()
          @props.graphStore.redo() if redo
          @props.graphStore.undo() if undo