<!doctype html>
<html ng-app="tao">
  <head>
    <link rel="stylesheet" href="http://twbs.github.io/bootstrap/dist/css/bootstrap.css">
    <script src="http://code.angularjs.org/1.0.8/angular.min.js"></script>
    <script src="script.js"></script>
    <style>tr.active > td { background: skyblue !important; color: #fff; }</style>
  </head>
  <body>
    <nav class="navbar navbar-default" role="navigation" ng-controller="MenuCtrl">
      <ul ng-show="isCollapsed" class="nav navbar-nav">
        <li><a href="#">Remove</a></li>
        <li><a href="#">Edit</a></li>
      </ul>
    </nav>
    <table ng-controller="PersonCtrl" class="table" ng-deselect>
     <tr>
       <th>Name</th>
       <th>Age</th>
     </tr>
      <tr ng-repeat="person in people" ng-click="selectPerson(person)" ng-class="{active: person.selected }">
        <td>{{ person.name }}</td>
        <td>{{ person.age }}</td>
      </tr>
    </table>
  </body>
</html>
var tao = angular.module('tao', [])

.controller('PersonCtrl', function($scope, $rootScope, MenuSvc, PeopleFctr) {
  $scope.selectedPerson = null;
  
  $scope.people = PeopleFctr;
  
  $scope.selectPerson = function(person) {
    if ($scope.selectedPerson !== null) $scope.selectedPerson.selected = false;
    
    person.selected = true;
    $scope.selectedPerson = person;
    MenuSvc.collapsed = true;
  };
})

.factory('PeopleFctr', function() {
  return [
    { name: 'adam', age: 24 },
    { name: 'steve', age: 30 }
  ];
})

.controller('MenuCtrl', function($scope, MenuSvc) {
  $scope.isCollapsed = MenuSvc.collapsed;
  $scope.menuService = MenuSvc;
  
  $scope.$watch(function() {
    return $scope.menuService.collapsed;
  }, function() {
    $scope.isCollapsed = MenuSvc.collapsed;
  });
})

.service('MenuSvc', function() {
  return {
    collapsed: false
  }
})

.directive('ngDeselect', function($document, MenuSvc) {
  
  var link = function(scope, element) {
    $document.bind('click', function(event) {
      var i, inside = false, matches = element.find(event.target.tagName);
      
      for(i=0; i<matches.length; i++) {
        if (event.target === matches[i]) inside = true;
      }
      
      if (!inside) {
        MenuSvc.collapsed = false;
        scope.selectedPerson.selected = false;
      }
      
      scope.$apply();
    });
  }
  
  return {
    link: link
  };
});