angular.module('githubViewer', ['ng-route']);
<!DOCTYPE html>
<html ng-app="githubViewer">

  <head>
    <meta charset="utf-8" />
    <title>GitHub_Viewer</title>
    <script>
    document.write('<base href="' + document.location + '" />');
  </script>
    <link rel="stylesheet" href="style.css" />
    <script data-require="angular.js@1.5.x" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.10/angular.min.js" data-semver="1.5.10"></script>
    <script data-require="angular-route@1.5.8" data-semver="1.5.8" src="https://code.angularjs.org/1.5.8/angular-route.js"></script>
    <script src="app.js"></script>
    <script src="mainCtrl.js"></script>
    <script src="githubService.js"></script>
  </head>

  <body ng-controller="MainCtrl">
    <div ng-if="!user">
    You have {{ countdown }} seconds to write the Github user name
  </div>
    <div> {{ error }}</div>
    <h1>{{message}}</h1>
    <form name="searchUser" ng-submit="search(username)">
      <input type="search" name="username" required="" placeholder="GitHub user name" ng-model="username" />
      <input type="submit" name="submit" />
    </form>
    <div ng-include="'userdetail.html'" ng-show="user"></div>
  </body>

</html>
/* Put your css in here */

<div id="userDetail">
    <div>name: {{ user.name }}</div>
    <div>location: {{user.location}}</div>
    <img ng-src="{{user.avatar_url}}" title="{{user.name}}">
    <div>
      order:
      <select ng-model="sortorder">
        <option value="+name">Name</option>
        <option value="-stargazers_count">Stars</option>
        <option value="+language">Language</option>
      </select>
    </div>
  </div>


  <table>
    <thead>
      <tr>
        <th>Name</th>
        <th>Stars</th>
        <th>Language</th>
      </tr>
    </thead>
    <tbody>
      <tr ng-repeat="repo in repos | orderBy:sortorder">
        <td>{{repo.name}}</td>
        <td>{{repo.stargazers_count | number}}</td>
        <td>{{repo.language}}</td>
      </tr>
    </tbody>
  </table>
angular.module('githubViewer')
  .factory('githubFactory', ['$http', 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
    };
    
  }])
angular.module('githubViewer')
  .controller('MainCtrl', ['$scope', 'githubFactory', '$interval', '$log', '$location', '$anchorScroll',
    function($scope, $interval, githubFactory, $log, $location, $anchorScroll) {

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

      var onRepos = function(data) {
        $scope.repos = data;
        $location.hash("userDetail");
        $anchorScroll();
      }

      var onError = function(reason) {
        $scope.error = "Could not fetch the data.";
      };

      $scope.search = function(username) {
        $log.info("you are searching for " + username);
        githubFactory.getUser(username)
          .then(onComplete, onError);
        if (countdownInterval) {
          $interval.cancel(countdownInterval);
        }

      };

      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.message = "GiHub user viewer";
      $scope.username = "Angular";
      $scope.sortorder = "-stargazers_count";
      $scope.countdown = 10;
      startcountdown();


    }])