FrAngular : controllers in module 3

HTML

<div ng-app="project">
  <h2>JavaScript Projects</h2>
  <div ng-view></div>



  <!-- CACHE FILE: list.html -->
  <script type="text/ng-template" id="list.html">
    <input type="text" ng-model="search" class="search-query" placeholder="Search">
    <table>
      <thead>
      <tr>
        <th>Project</th>
        <th>Description</th>
        <th><a href="#/new"><i class="icon-plus-sign"></i></a></th>
      </tr>
      </thead>
      <tbody>
      <tr ng-repeat="project in projects | filter:search | orderBy:'name'">
        <td><a href="{{project.site}}" target="_blank">{{project.name}}</a></td>
        <td>{{project.description}}</td>
        <td>
          <a href="#/edit/{{project._id.$oid}}"><i class="icon-pencil"></i></a>
        </td>
      </tr>
      </tbody>
    </table>
  </script>



  <!-- CACHE FILE: detail.html -->
  <script type="text/ng-template" id="detail.html">
    <form name="myForm">
      <div class="control-group" ng-class="{error: myForm.name.$invalid}">
        <label>Name</label>
        <input type="text" name="name" ng-model="project.name" required>
        <span ng-show="myForm.name.$error.required" class="help-inline">
            Required</span>
      </div>
    
      <div class="control-group" ng-class="{error: myForm.site.$invalid}">
        <label>Website</label>
        <input type="url" name="site" ng-model="project.site" required>
        <span ng-show="myForm.site.$error.required" class="help-inline">
            Required</span>
        <span ng-show="myForm.site.$error.url" class="help-inline">
            Not a URL</span>
      </div>
    
      <label>Description</label>
      <textarea name="description" ng-model="project.description"></textarea>
    
      <br>
      <a href="#/" class="btn">Cancel</a>
      <button ng-click="save()" ng-disabled="isClean() || myForm.$invalid"
              class="btn btn-primary">Save</button>
      <button ng-click="destroy()"
              ng-show="project._id" class="btn...

CSS

</style> <!-- Ugly Hack due to jsFiddle issue: http://goo.gl/BUfGZ --> 
<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css">
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular-resource.min.js"></script>
<style>

JavaScript

(function () {  // anonymous wrapper

var project = angular.module('project', ['mongolab']);

project.config(function($routeProvider) {
  $routeProvider.
    when('/', {controller:'ListCtrl', templateUrl:'list.html'}).
    when('/edit/:projectId', {controller:'EditCtrl', templateUrl:'detail.html'}).
    when('/new', {controller:'CreateCtrl', templateUrl:'detail.html'}).
    otherwise({redirectTo:'/'});
});

project.controller('ListCtrl', ['$scope', 'Project', ListCtrl]);
project.controller('CreateCtrl', ['$scope', '$location', 'Project', CreateCtrl]);
project.controller('EditCtrl', ['$scope', '$location', '$routeParams', 'Project', EditCtrl]);
    
function ListCtrl($scope, Project) {
    $scope.projects = Project.query();
}

function CreateCtrl($scope, $location, Project) {
    $scope.save = function() {
        Project.save($scope.project, function(project) {
            $location.path('/edit/' + project._id.$oid);
        });
    }
}
    
function EditCtrl($scope, $location, $routeParams, Project) {
    var self = this;
    
    Project.get({id: $routeParams.projectId}, function(project) {
      self.original = project;
      $scope.project = new Project(self.original);
    });
    
    $scope.isClean = function() {
      return angular.equals(self.original, $scope.project);
    }
    
    $scope.destroy = function() {
      self.original.destroy(function() {
        $location.path('/list');
      });
    };
    
    $scope.save = function() {
      $scope.project.update(function() {
        $location.path('/');
      });
    };
}

// This is a module for cloud persistance in mongolab - https://mongolab.com
var mongolab = angular.module('mongolab', ['ngResource']);

mongolab.factory('Project', function($resource) {
    var Project = $resource('https://api.mongolab.com/api/1/databases' +
        '/angularjs/collections/projects/:id',
        { apiKey: '4f847ad3e4b08a2eed5f3b54' }, {
          update: { method: 'PUT' }
        }
    );

   ...