<!DOCTYPE html>
<html ng-app="githubViewer">

  <head>
    <script data-require="angular.js@1.3.0-beta.5" data-semver="1.3.0-beta.5" src="https://code.angularjs.org/1.3.0-beta.5/angular.js"></script>
    <script data-require="angular-route@1.2.14" data-semver="1.2.14" src="https://code.angularjs.org/1.2.14/angular-route.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="app.js"></script>
    <script src="MainController.js"></script>
    <script src="UserController.js"></script>
    <script src="github.js"></script>
  </head>

  <body>
    <h1>Github Viewer</h1>
    <div ng-view=""></div>
  </body>

</html>
// Code goes here

(function(module) {

  var MainController = function($scope, $interval, $location, $log) {

    var decrementCountdown = function() {
      $scope.countdown -= 1;

      if ($scope.countdown < 1) {
        $scope.search($scope.username);
      }
    };

    var countDowninterval = null;
    var startCountdown = function() {
      countDowninterval = $interval(decrementCountdown, 1000, $scope.countdown);

    };
 
    $scope.search = function(username) {
      if (countDowninterval) {
        $interval.cancel(countDowninterval);
        $scope.countdown = null;
      }

      //Search
      $log.log("Searching...")
      $location.path("/user/" + username);
    };
    $scope.username = "angular";
    $scope.countdown = 10;
    startCountdown(); 
  }; 
  
  module.controller("MainController", MainController);
  
}(angular.module("githubViewer")));
/* Styles go here */

<div>
  </h2>{{user.name}}</h2>
  {{error}}
  <div>Last Name: {{user.name}}</div>
  <div>Location: {{user.location}}</div>
  <div>
    <img src="{{user.avatar_url}}" style="width:80px;height:80px;" />
  </div>
  <select ng-model="repoSortOrder">
    <option value="+name">Name</option>
    <option value="-stargazers_count">Count</option>
  </select>

</div>

<table border=1>
  <thead>
    <tr>
      <th>Name</th>
      <th>Stars</th>
      <th>Language</th>
    </tr>
  </thead>
  <tbody>
    <tr ng-repeat="repo in repos | orderBy:repoSortOrder">
      <td>{{repo.name}}</td>
      <td>{{repo.stargazers_count | number}}</td>
      <td>{{repo.language}}</td>
    </tr>
  </tbody>

</table>
<a href="#/main">Back to Search</a>
//***** This is a service in Angular 

(function(module){
  
  var github = function($http){
    
    var getUser = function(username){
     return $http.get("https://api.github.com/users/" + username)
           .then(function(response){
             return response.data;
           });
    };
    
    var getRepos = function(user){
      return $http.get(user.repos_url)
                  .then(function(response){
                    return response.data
                  });
    };
    
    return {
      getUser: getUser,
      getRepos: getRepos
    };
  };
  
  module.factory("github", github);
  
  
}(angular.module("githubViewer")));
  
//***** This is an angular app/module registering controllers based on routing.

(function(module) {
  module.config(function($routeProvider) {
    $routeProvider
      .when("/main", {
        templateUrl: "main.html",  
        controller: "MainController"
      })
      .when("/user/:username", {
        templateUrl: "user.html",
        controller: "UserController"
      })
      .otherwise({redirectTo: "/main"})
  }); 
 
}(angular.module("githubViewer", ["ngRoute"])));
<div>
  {{ countdown}}

  <form name="searchUser" ng-submit="search(username)">
    <input type="text" required placeholder="Username to find" ng-model="username" />
    <input type="submit" value="Search" />
    
  </form>

</div>
// Code goes here

(function(module) {

  var UserController = function($scope, github, $routeParams, $log) {

    var onUserComplete = function(data) {
      $scope.user = data;
      github.getRepos($scope.user).then(onRepos, onError);
    };

    var onRepos = function(data) {
      $scope.repos = data;
    };
    var onError = function(response) {
      $scope.message = "Could not fetch the data!"
    };

    $scope.username = $routeParams.username;
    $scope.repoSortOrder = "-stargazers_count";
    $log.log("UserController username: " + $scope.username);
    github.getUser($scope.username).then(onUserComplete, onError);
  };

  module.controller("UserController", UserController);

}(angular.module("githubViewer")));