function()

in public/javascripts/app/controllers/SnapshotListCtrl.js [13:87]


  function($scope, $routeParams, $timeout, SnapshotService, SnapshotIdModels){

    var snapshotCollection;

    $scope.isLoading  = true;
    $scope.isSidebarActive = false;

    SnapshotIdModels
      .getCollection($routeParams.contentId)
      .then((collection) => {
        snapshotCollection = collection;
        snapshotCollection.getModelAt(0).set('activeState', true);
        $scope.isLoading  = false;
        $scope.models = collection.getModels();

        var activeModel = collection.find((data)=> data.activeState);
        $scope.articleTitle = activeModel.getHeadline();
        $scope.articleHash = activeModel.getContentId();
        // TODO - this should ideally gather URLs of all source systems rather than just the most recent
        $scope.articleURL = activeModel.getComposerUrl();
        //animate sidebar in
        $timeout(()=> $scope.isSidebarActive = true, 500);
      })
      .catch((err) => {
        $scope.isLoading = false;
        mediator.publish('error', err);
      });

    //set active model to a specific index
    mediator.subscribe('snapshot-list:set-active', function(index){
      var activeModel = snapshotCollection.find((data)=> data.activeState);
      var model = snapshotCollection.getModelAt(index);
      if (activeModel === model) {
        return;
      }
      setActive(activeModel, model);
    });

    //increment the active model
    mediator.subscribe('snapshot-list:increment-active', function(){
      var activeModel = snapshotCollection.find((data)=> data.activeState);
      var index = snapshotCollection.indexOf(activeModel) + 1;
      if (index === snapshotCollection.length()) {
        index = 0;
      }
      var model = snapshotCollection.getModelAt(index);
      setActive(activeModel, model);
    });

    //decrement the active model
    mediator.subscribe('snapshot-list:decrement-active', function(){
      var activeModel = snapshotCollection.find((data)=> data.activeState);
      var index = snapshotCollection.indexOf(activeModel) -1;
      if (index === -1) {
        index = snapshotCollection.length() - 1;
      }
      var model = snapshotCollection.getModelAt(index);
      setActive(activeModel, model);
    });

    function setActive(activeModel, model) {
      //set active states
      activeModel.set('activeState', false);
      model.set('activeState', true);
      mediator.publish('track:event', 'Snapshot', 'Active', null, null, {
        contentId: model.id,
        snapshotTime: model.timestamp
      });
      //place the content
      $timeout(()=>
          mediator.publish('snapshot-list:load-content', model.getSystemId(), model.getContentId(), model.getTimestamp()), 10
      );
    }

  }