function()

in public/javascripts/app/controllers/SnapshotListInteractionCtrl.js [8:92]


  function($scope){

    $scope.isDisplayingHTML   = true;
    $scope.isDisplayingJSON   = false;
    $scope.isDisplayingModal  = false;

    //SETS THE CURRENT STATE OF THE UI
    //THIS CAN ONLY BE 'json' || 'html' || 'modal';
    function setState(state) {
      $scope.isDisplayingHTML   = (state === 'html')  ? true : false;
      $scope.isDisplayingJSON   = (state === 'json')  ? true : false;
      $scope.isDisplayingModal  = (state === 'modal') ? true : false;
    }

    //REACT TO WHEN THE MODAL IS CLOSED
    //WE SET THE STATE TO THE DEFAULT HTML STATE
    //THIS IS MUCH SIMPLER THAT TRACKING THE LAST STATE BEFORE THE MODAL OPENS
    mediator.subscribe('snapshot-list:hidden-modal', ()=> {
      setState('html');
    });

    // DISPLAY HTML
    this.onItemClicked = (index) => {
      setState('html');
      mediator.publish('snapshot-list:display-html');
      mediator.publish('snapshot-list:set-active', index);
    };

    window.addEventListener('copy', function(e){
      // get the selected content
      var selection = window.getSelection();
      var range = selection.getRangeAt(0);
      var content = range.cloneContents();
      var div = document.createElement('div');
      div.appendChild(content);
      content = div.innerHTML;
      //send it off
      mediator.publish('track:event', 'Snapshot', 'Copied');
    })

    //keypress events
    //todo abstract these into a keyboard interaction controller
    //jp 10-04-15
    window.addEventListener('keydown', function(e){
      // IF WE ARE CURRENTLY DISPLAYING THE MODAL WINDOW
      // WE WANT TO CANCEL ALL KEYBOARD OPERATIONS
      switch(e.keyCode){
        case 40: // DOWN KEY
          if (!$scope.isDisplayingModal) {
            e.preventDefault();
            mediator.publish('snapshot-list:increment-active');
          }
        break;
        case 38:// UP KEY
          if (!$scope.isDisplayingModal) {
            e.preventDefault();
            mediator.publish('snapshot-list:decrement-active');
          }
        break;
        case 13: // ENTER KEY
          if (!$scope.isDisplayingModal) {
            e.preventDefault();
            setState('modal');
            mediator.publish('snapshot-list:display-modal');
          }
        break;
        case 37: // LEFT KEY
          e.preventDefault();
          if (!$scope.isDisplayingModal) {
            setState('html');
            mediator.publish('snapshot-list:display-html');
          }
        break;
        case 39: // RIGHT KEY
          e.preventDefault();
          if (!$scope.isDisplayingModal) {
            setState('json');
            mediator.publish('snapshot-list:display-json');
          }
        break;
      }

    });

  }