Reorganization of Angular modules.

Project: http://git-wip-us.apache.org/repos/asf/rave/repo
Commit: http://git-wip-us.apache.org/repos/asf/rave/commit/277e58a4
Tree: http://git-wip-us.apache.org/repos/asf/rave/tree/277e58a4
Diff: http://git-wip-us.apache.org/repos/asf/rave/diff/277e58a4

Branch: refs/heads/angular
Commit: 277e58a449483f6b2cf3787034372f2663f3e65b
Parents: 7ea6f7e
Author: Jmeas <[email protected]>
Authored: Mon Aug 11 12:23:48 2014 -0400
Committer: Jmeas <[email protected]>
Committed: Mon Aug 11 17:24:21 2014 -0400

----------------------------------------------------------------------
 rave-portal-ng/src/index.js                     |  30 ++--
 rave-portal-ng/src/providers/api/api-route.js   |  11 ++
 .../src/providers/values/api-route.js           |   7 -
 rave-portal-ng/src/rave.js                      |  47 ++++--
 rave-portal-ng/src/routes.js                    |  25 +--
 rave-portal-ng/src/subapps/admin/admin.html     |  37 -----
 rave-portal-ng/src/subapps/admin/admin.js       |  53 ++++---
 .../subapps/admin/categories/categories.html    |  54 -------
 .../src/subapps/admin/categories/categories.js  |  40 +++++
 .../admin/categories/category/category.html     |  14 --
 .../admin/categories/controllers/categories.js  |   6 +
 .../admin/categories/controllers/category.js    |   6 +
 .../admin/categories/resources/categories.js    |   8 +-
 .../admin/categories/resources/category.js      |   6 +
 .../src/subapps/admin/categories/routes.js      |  23 ++-
 .../admin/categories/templates/categories.html  |  54 +++++++
 .../admin/categories/templates/category.html    |  14 ++
 rave-portal-ng/src/subapps/admin/home/home.html |   8 -
 rave-portal-ng/src/subapps/admin/home/home.js   |  28 ++++
 rave-portal-ng/src/subapps/admin/home/routes.js |  20 +++
 .../src/subapps/admin/home/templates/home.html  |   8 +
 rave-portal-ng/src/subapps/admin/index.js       |   8 -
 .../preferences/controllers/preferences.js      |   6 +
 .../subapps/admin/preferences/preferences.html  |  67 --------
 .../subapps/admin/preferences/preferences.js    |  34 ++++
 .../admin/preferences/resources/preferences.js  |   6 +
 .../src/subapps/admin/preferences/routes.js     |  21 ++-
 .../preferences/templates/preferences.html      |  67 ++++++++
 rave-portal-ng/src/subapps/admin/routes.js      |  28 ++--
 .../src/subapps/admin/templates/admin.html      |  37 +++++
 .../subapps/admin/users/controllers/users.js    |   6 +
 .../src/subapps/admin/users/detail/detail.html  |  61 --------
 .../src/subapps/admin/users/routes.js           |  23 ++-
 .../subapps/admin/users/templates/detail.html   |  61 ++++++++
 .../subapps/admin/users/templates/users.html    |  60 ++++++++
 .../src/subapps/admin/users/users.html          |  60 --------
 rave-portal-ng/src/subapps/admin/users/users.js |  31 ++++
 .../subapps/admin/widgets/detail/detail.html    | 154 -------------------
 .../src/subapps/admin/widgets/routes.js         |  20 ++-
 .../subapps/admin/widgets/templates/detail.html | 154 +++++++++++++++++++
 .../admin/widgets/templates/widgets.html        |  81 ++++++++++
 .../src/subapps/admin/widgets/widgets.html      |  81 ----------
 .../src/subapps/admin/widgets/widgets.js        |  27 ++++
 rave-portal-ng/src/subapps/auth/api/api.js      |  30 ++++
 .../subapps/auth/api/services/auth-api-base.js  |   9 ++
 .../auth/api/services/auth-api-routes.js        |  18 +++
 .../src/subapps/auth/api/services/auth-api.js   |  29 ++++
 rave-portal-ng/src/subapps/auth/auth.js         |  33 +++-
 .../src/subapps/auth/controllers/login-form.js  |  24 ---
 .../controllers/create-account.js               |  14 +-
 .../auth/create-account/create-account.html     | 136 ----------------
 .../auth/create-account/create-account.js       |  45 ++++++
 .../auth/create-account/create-account.less     |   0
 .../create-account/directives/password-check.js |  31 ++++
 .../create-account/less/create-account.less     |   0
 .../providers/create-account-api-routes.js      |  20 ---
 .../providers/create-account-api.js             |  27 ----
 .../src/subapps/auth/create-account/routes.js   |  16 +-
 .../services/create-account-api-routes.js       |  16 ++
 .../services/create-account-api.js              |  19 +++
 .../templates/create-account.html               | 136 ++++++++++++++++
 .../subapps/auth/directives/password-check.js   |  26 ----
 .../controllers/forgot-password.js              |  14 +-
 .../auth/forgot-password/forgot-password.html   |  32 ----
 .../auth/forgot-password/forgot-password.js     |  41 +++++
 .../providers/forgot-password-api-routes.js     |  20 ---
 .../providers/forgot-password-api.js            |  27 ----
 .../src/subapps/auth/forgot-password/routes.js  |  16 +-
 .../services/forgot-password-api-routes.js      |  16 ++
 .../services/forgot-password-api.js             |  19 +++
 .../templates/forgot-password.html              |  32 ++++
 .../controllers/forgot-username.js              |  16 +-
 .../auth/forgot-username/forgot-username.html   |  32 ----
 .../auth/forgot-username/forgot-username.js     |  41 +++++
 .../auth/forgot-username/forgot-username.less   |  10 --
 .../forgot-username/less/forgot-username.less   |  10 ++
 .../providers/forgot-username-api-routes.js     |  20 ---
 .../providers/forgot-username-api.js            |  27 ----
 .../src/subapps/auth/forgot-username/routes.js  |  16 +-
 .../services/forgot-username-api-routes.js      |  16 ++
 .../services/forgot-username-api.js             |  19 +++
 .../templates/forgot-username.html              |  32 ++++
 rave-portal-ng/src/subapps/auth/index.js        |  33 ----
 rave-portal-ng/src/subapps/auth/login.html      |  75 ---------
 rave-portal-ng/src/subapps/auth/login.less      |  18 ---
 .../auth/login/controllers/login-form.js        |  27 ++++
 .../src/subapps/auth/login/less/login.less      |  18 +++
 rave-portal-ng/src/subapps/auth/login/login.js  |  33 ++++
 rave-portal-ng/src/subapps/auth/login/routes.js |  21 +++
 .../src/subapps/auth/login/templates/login.html |  75 +++++++++
 .../src/subapps/auth/logout/logout.js           |  30 ++++
 .../src/subapps/auth/logout/routes.js           |  25 +++
 .../src/subapps/auth/route-intercept.js         |  58 -------
 rave-portal-ng/src/subapps/auth/routes.js       |  34 ----
 .../subapps/auth/security/route-intercept.js    |  52 +++++++
 .../src/subapps/auth/security/security.js       |  38 +++++
 .../auth/security/services/auth-cache.js        |  29 ++++
 .../auth/security/services/auth-token.js        |  44 ++++++
 .../auth/security/services/location-cache.js    |  13 ++
 .../subapps/auth/security/services/security.js  |  92 +++++++++++
 .../src/subapps/auth/services/auth-api-base.js  |  11 --
 .../subapps/auth/services/auth-api-routes.js    |  22 ---
 .../src/subapps/auth/services/auth-api.js       |  33 ----
 .../src/subapps/auth/services/auth-cache.js     |  32 ----
 .../src/subapps/auth/services/auth-token.js     |  47 ------
 .../src/subapps/auth/services/location-cache.js |  10 --
 .../src/subapps/auth/services/security.js       |  99 ------------
 .../src/subapps/home/home-controller.js         |  25 ---
 rave-portal-ng/src/subapps/home/home.html       |   2 -
 rave-portal-ng/src/subapps/home/home.js         |  27 +++-
 rave-portal-ng/src/subapps/home/home.less       |   5 -
 rave-portal-ng/src/subapps/home/index.js        |   5 -
 rave-portal-ng/src/subapps/home/routes.js       |  21 +--
 .../src/subapps/home/templates/home.html        |   2 +
 rave-portal-ng/src/subapps/profile/index.js     |   5 -
 .../src/subapps/profile/my-directive.js         |  12 --
 rave-portal-ng/src/subapps/profile/profile.html |   3 -
 rave-portal-ng/src/subapps/profile/profile.js   |  28 +++-
 rave-portal-ng/src/subapps/profile/routes.js    |  22 +--
 .../src/subapps/profile/templates/profile.html  |   3 +
 .../src/subapps/widget-store/index.js           |   4 -
 .../src/subapps/widget-store/routes.js          |  21 ++-
 .../widget-store/templates/widget-store.html    | 119 ++++++++++++++
 .../src/subapps/widget-store/widget-store.html  | 119 --------------
 .../src/subapps/widget-store/widget-store.js    |  27 +++-
 125 files changed, 2315 insertions(+), 1781 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/index.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/index.js b/rave-portal-ng/src/index.js
index 2c9412f..e6e2d44 100644
--- a/rave-portal-ng/src/index.js
+++ b/rave-portal-ng/src/index.js
@@ -1,28 +1,28 @@
+/*
+ * index
+ * Bootstraps our app, loading libraries (like Bootstrap) that aren't Angular 
modules,
+ * but need to be booted up separately.
+ * It also pulls in the Rave Angular module and manually bootstraps it.
+ *
+ */
+
 define(function(require) {
-  // Initialize libraries
+
+  // Initialize any non-Angular Javascript libraries here
   require('bootstrap');
-  require('uiRouter');
-  require('angularMocks');
-  require('angularCookie');
-  require('angularResource');
   
-  // Set up our application
+  // Create our application
   require('rave');
 
-  // The mock API
+  // Load the mock API (development only)
   require('./api/bootstrap');
   
-  // The base route
-  require('./routes');
-
   // Our things
   require('./providers/filters/index');
-  require('./providers/values/api-route');
-
-  var angular = require('angular');
 
   // Manually bootstrap the Angular app (necessary because of AMD)
-  angular.element(document).ready(function() {
-    angular.bootstrap(document, ['rave']);
+  var ng = require('angular');
+  ng.element(document).ready(function() {
+    ng.bootstrap(document, ['rave']);
   });
 });

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/providers/api/api-route.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/providers/api/api-route.js 
b/rave-portal-ng/src/providers/api/api-route.js
new file mode 100644
index 0000000..7d05584
--- /dev/null
+++ b/rave-portal-ng/src/providers/api/api-route.js
@@ -0,0 +1,11 @@
+define(function(require) {
+  var ng = require('angular');
+
+  var API_VERSION = 1;
+
+  var api = ng.module('api', []);
+
+  api.value('apiRoute', '/api/v' + API_VERSION + '/');
+
+  return api;
+});

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/providers/values/api-route.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/providers/values/api-route.js 
b/rave-portal-ng/src/providers/values/api-route.js
deleted file mode 100644
index 52665ee..0000000
--- a/rave-portal-ng/src/providers/values/api-route.js
+++ /dev/null
@@ -1,7 +0,0 @@
-define(function(require) {
-  var rave = require('rave');
-
-  var API_VERSION = 1;
-
-  rave.value('apiRoute', '/api/v' + API_VERSION + '/');
-});

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/rave.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/rave.js b/rave-portal-ng/src/rave.js
index d498c4e..f049a3d 100644
--- a/rave-portal-ng/src/rave.js
+++ b/rave-portal-ng/src/rave.js
@@ -1,27 +1,44 @@
+/*
+ * rave
+ * The main Angular module for Rave.
+ * This module is mainly a container for the other modules that
+ * make up the application.
+ *
+ */
+
 define(function(require) {
-  var angular = require('angular');
+  var ng = require('angular');
+
+  // Our module dependencies
+  require('uiRouter');
+  require('angularMocks');
+  require('angularCookie');
+  require('angularResource');
 
-  // The individual subapps
-  require('./subapps/home/index');
-  require('./subapps/admin/index');
-  require('./subapps/auth/index');
-  require('./subapps/profile/index');
-  require('./subapps/widget-store/index');
+  // Our 'subapp' dependencies
+  var home = require('./subapps/home/home');
+  var profile = require('./subapps/profile/profile');
+  var widgetStore = require('./subapps/widget-store/widget-store');
+  var admin = require('./subapps/admin/admin');
+  var auth = require('./subapps/auth/auth');
 
+  // Create an array out of our dependencies for Angular's DI
   var raveDependencies = [
     'ui.router',
     'profile',
     'ngMockE2E',
-    'home',
-    'widget-store',
-    'profile',
-    'auth',
-    'admin',
+    home.name,
+    widgetStore.name,
+    profile.name,
+    auth.name,
+    admin.name,
     'filters'
   ];
 
-  var rave = angular.module('rave', raveDependencies);
+  // Create Rave as an Angular module
+  var rave = ng.module('rave', raveDependencies);
 
+  // Some fake data until the mock API adds the Bootstrap route.
   rave.controller('appData', [
     '$scope', '$state', '$stateParams',
     function($scope, $state, $stateParams) {
@@ -35,6 +52,10 @@ define(function(require) {
     $scope.$stateParams = $stateParams;
   }]);
 
+  // Routes
+  var routes = require('./routes');
+  rave.config(routes);
+
   // Exposed on the window *only* for debugging purposes
   window.rave = rave;
 

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/routes.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/routes.js b/rave-portal-ng/src/routes.js
index 6b3c71d..4ff9631 100644
--- a/rave-portal-ng/src/routes.js
+++ b/rave-portal-ng/src/routes.js
@@ -1,16 +1,21 @@
+/*
+ * routes
+ * The base route for the Rave project. This makes /portal
+ * the root location to access the app from.
+ *
+ */
+
 define(function(require) {
-  var rave = require('rave');
-  
-  rave.config([
-    '$stateProvider', '$urlRouterProvider',
+
+  return ['$stateProvider', '$urlRouterProvider',
     function($stateProvider, $urlRouterProvider) {
 
       // Set up our abstract base state.
       $stateProvider.state('portal', {
-          url: '/portal',
-          abstract: true,
-          template: '<ui-view/>'
-        });
-      }
-  ]);
+        url: '/portal',
+        abstract: true,
+        template: '<ui-view/>'
+      });
+    }
+  ];
 });

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/admin.html
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/admin.html 
b/rave-portal-ng/src/subapps/admin/admin.html
deleted file mode 100644
index ab35e20..0000000
--- a/rave-portal-ng/src/subapps/admin/admin.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<div class="row-fluid">
-  <div class="span2">
-    <nav>
-      <div class="tabbable">
-        <ul class="nav nav-tabs nav-stacked">
-          <li ng-class="{ active: $state.includes('portal.admin.home') }">
-            <a ui-sref="portal.admin.home">
-              Home
-            </a>
-          </li>
-          <li ng-class="{ active: $state.includes('portal.admin.users') }">
-            <a ui-sref="portal.admin.users({page:1})">
-              Users
-            </a>
-          </li>
-          <li ng-class="{ active: $state.includes('portal.admin.widgets') }">
-            <a ui-sref="portal.admin.widgets({page:1})">
-              Widgets
-            </a>
-          </li>
-          <li ng-class="{ active: $state.includes('portal.admin.preferences') 
}">
-            <a ui-sref="portal.admin.preferences">
-              Preferences
-            </a>
-          </li>
-          <li ng-class="{ active: $state.includes('portal.admin.categories') 
}">
-            <a ui-sref="portal.admin.categories">
-              Categories
-            </a>
-          </li>
-        </ul>
-      </div>
-    </nav>
-  </div>
-  <div class="span10" ui-view>
-  </div>
-</div>

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/admin.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/admin.js 
b/rave-portal-ng/src/subapps/admin/admin.js
index 473d349..1e040e1 100644
--- a/rave-portal-ng/src/subapps/admin/admin.js
+++ b/rave-portal-ng/src/subapps/admin/admin.js
@@ -1,37 +1,42 @@
+/*
+ * routes
+ * The containing module for the admin section of Rave.
+ *
+ */
+
 define(function(require) {
   var ng = require('angular');
+
+  // Our dependencies
+  require('uiRouter');
   require('../../providers/pagination/pagination');
 
+  // Our sub-subapps
+  var categories = require('./categories/categories');
+  var home = require('./home/home');
+  var preferences = require('./preferences/preferences');
+  var widgets = require('./widgets/widgets');
+  var users = require('./users/users');
+
+  // An array of our dependencies for Angular's DI
   var adminDependencies = [
+    'ui.router',
     'ngResource',
-    'pagination'
+    'pagination',
+    preferences.name,
+    categories.name,
+    home.name,
+    widgets.name,
+    users.name
   ];
 
+  // Create our admin subapp as a module
   var admin = ng.module('admin', adminDependencies);
 
-  // Categories
-  var categoriesResource = require('./categories/resources/categories');
-  admin.factory('categoriesResource', categoriesResource);
-
-  var categoryResource = require('./categories/resources/category');
-  admin.factory('categoryResource', categoryResource);
-
-  var categoriesCtrl = require('./categories/controllers/categories');
-  admin.controller('categoriesCtrl', categoriesCtrl);
-
-  var categoryCtrl = require('./categories/controllers/category');
-  admin.controller('categoryCtrl', categoryCtrl);
-
-  // Preferences
-  var preferencesResource = require('./preferences/resources/preferences');
-  admin.factory('preferencesResource', preferencesResource);
-
-  var preferencesCtrl = require('./preferences/controllers/preferences');
-  admin.controller('preferencesCtrl', preferencesCtrl);
-
-  // Users
-  var usersCtrl = require('./users/controllers/users');
-  admin.controller('usersCtrl', usersCtrl);
+  // Register our routes
+  var routes = require('./routes');
+  admin.config(routes);
 
+  // Export the admin module
   return admin;
 });

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/categories/categories.html
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/categories/categories.html 
b/rave-portal-ng/src/subapps/admin/categories/categories.html
deleted file mode 100644
index 7b47c21..0000000
--- a/rave-portal-ng/src/subapps/admin/categories/categories.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<article ui-view>
-  <h2>Categories</h2>
-  <table id="categoryList" class="table table-striped table-bordered 
table-condensed">
-    <thead>
-      <tr>
-        <th>Text</th>
-        <th>Created By</th>
-        <th>Date Created</th>
-        <th>Modified By</th>
-        <th>Date Modified</th>
-      </tr>
-    </thead>
-    <tbody>
-      <tr ng-repeat="category in categories">
-        <td>
-          <a ui-sref="portal.admin.categories.category({id: category.ID})">
-            {{ category.text }}
-          </a>
-        </td>
-        <td>
-          {{ category.createdUserName }}
-        </td>
-        <td>
-          {{ category.createdDate | date:'short' }}
-        </td>
-        <td>
-          {{ category.lastModifiedUserName }}
-        </td>
-        <td>
-          {{ category.lastModifiedDate | date:'short' }}
-        </td>
-      </tr>
-    </tbody>
-  </table>
-  <div>
-    <form id="createCategory" class="form-inline">
-      <fieldset>
-        <legend>
-          Create Category
-        </legend>
-        <div class="control-group">
-          <label class="control-label" for="text">
-            Text:
-          </label>
-          <div class="controls">
-            <input id="text" name="text" autofocus="autofocus" 
required="required" type="text" value="" ng-model="newText">&nbsp;
-            <button class="btn btn-primary" ng-click="onCreate()">Create 
Category</button>
-          </div>
-        </div>
-      </fieldset>
-    </form>
-  </div>
-</article>
-

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/categories/categories.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/categories/categories.js 
b/rave-portal-ng/src/subapps/admin/categories/categories.js
new file mode 100644
index 0000000..c1d5c86
--- /dev/null
+++ b/rave-portal-ng/src/subapps/admin/categories/categories.js
@@ -0,0 +1,40 @@
+/*
+ * categories
+ * The categories module for the admin section of the app.
+ *
+ */
+
+define(function(require) {
+  var ng = require('angular');
+
+  // Our module dependencies
+  require('uiRouter');
+
+  // The array of names for Angular's dependency injection
+  var categoriesDependencies = [
+    'ui.router'
+  ];
+
+  // Create our module
+  var categories = ng.module('admin.categories', categoriesDependencies);
+
+  // Register the providers for categories
+  var categoriesResource = require('./resources/categories');
+  categories.factory('categoriesResource', categoriesResource);
+
+  var categoryResource = require('./resources/category');
+  categories.factory('categoryResource', categoryResource);
+
+  var categoriesCtrl = require('./controllers/categories');
+  categories.controller('categoriesCtrl', categoriesCtrl);
+
+  var categoryCtrl = require('./controllers/category');
+  categories.controller('categoryCtrl', categoryCtrl);
+
+  // Register the routes
+  var routes = require('./routes');
+  categories.config(routes);
+
+  // Export the module
+  return categories;
+});

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/categories/category/category.html
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/categories/category/category.html 
b/rave-portal-ng/src/subapps/admin/categories/category/category.html
deleted file mode 100644
index 585590c..0000000
--- a/rave-portal-ng/src/subapps/admin/categories/category/category.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<div>
-  <a ui-sref="portal.admin.categories">« Back to Categories</a>
-  <h2>Category – "{{ category.text }}"</h2>
-  <div class="well">
-    <section>
-      <label for="text">Name: </label>
-      <input id="text" name="text" type="text" ng-model="text">
-      <br><br>
-      <button class="btn" ng-click="onSave()">Save</button>
-      <button class="btn btn-danger" ng-click="onDelete()">Delete</button>
-    </section>
-  </div>  
-</div>
-      

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/categories/controllers/categories.js
----------------------------------------------------------------------
diff --git 
a/rave-portal-ng/src/subapps/admin/categories/controllers/categories.js 
b/rave-portal-ng/src/subapps/admin/categories/controllers/categories.js
index 2b9028d..be1c3eb 100644
--- a/rave-portal-ng/src/subapps/admin/categories/controllers/categories.js
+++ b/rave-portal-ng/src/subapps/admin/categories/controllers/categories.js
@@ -1,3 +1,9 @@
+/*
+ * categories
+ * Handles submission of our form
+ *
+ */
+
 define(function(require) {
   return ['$scope', 'categoriesResource', '$stateParams', '$rootScope',
   function($scope, categoriesResource, $stateParams, $rootScope) {

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/categories/controllers/category.js
----------------------------------------------------------------------
diff --git 
a/rave-portal-ng/src/subapps/admin/categories/controllers/category.js 
b/rave-portal-ng/src/subapps/admin/categories/controllers/category.js
index 552bff6..de72013 100644
--- a/rave-portal-ng/src/subapps/admin/categories/controllers/category.js
+++ b/rave-portal-ng/src/subapps/admin/categories/controllers/category.js
@@ -1,3 +1,9 @@
+/*
+ * category
+ * Handles submission of our form
+ *
+ */
+
 define(function(require) {
   return ['$scope', 'categoryResource', '$state', '$stateParams',
   function($scope, categoryResource, $state, $stateParams) {

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/categories/resources/categories.js
----------------------------------------------------------------------
diff --git 
a/rave-portal-ng/src/subapps/admin/categories/resources/categories.js 
b/rave-portal-ng/src/subapps/admin/categories/resources/categories.js
index f79b644..d6ec7d7 100644
--- a/rave-portal-ng/src/subapps/admin/categories/resources/categories.js
+++ b/rave-portal-ng/src/subapps/admin/categories/resources/categories.js
@@ -1,3 +1,9 @@
+/*
+ * categoriesResource
+ * The resource for the categories list
+ *
+ */
+
 define(function(require) {
 
   // The API endpoint for categories
@@ -6,7 +12,7 @@ define(function(require) {
   // Return the categories resource
   return ['$resource', 'authToken',
   function($resource, authToken) {
-    var authHeader = {
+    var authHeader = { 
       Authorization: 'Basic ' + authToken.get()
     };
 

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/categories/resources/category.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/categories/resources/category.js 
b/rave-portal-ng/src/subapps/admin/categories/resources/category.js
index e4001b5..4475eaf 100644
--- a/rave-portal-ng/src/subapps/admin/categories/resources/category.js
+++ b/rave-portal-ng/src/subapps/admin/categories/resources/category.js
@@ -1,3 +1,9 @@
+/*
+ * categoryResource
+ * A resource for a single category
+ *
+ */
+
 define(function(require) {
 
   // The API endpoint for categories

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/categories/routes.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/categories/routes.js 
b/rave-portal-ng/src/subapps/admin/categories/routes.js
index 19bc73b..8e51a51 100644
--- a/rave-portal-ng/src/subapps/admin/categories/routes.js
+++ b/rave-portal-ng/src/subapps/admin/categories/routes.js
@@ -1,25 +1,34 @@
+/*
+ * routes
+ * UI-router states for this section
+ *
+ */
+
 define(function(require) {
-  require('../admin');
-  var angular = require('angular');
   var categoriesCtrl = require('./controllers/categories');
   var categoryCtrl = require('./controllers/category');
 
-  angular.module('admin').config([
-    '$stateProvider', '$urlRouterProvider',
+  return ['$stateProvider', '$urlRouterProvider',
     function($stateProvider, $urlRouterProvider) {
+
+      // Configure our routes as ui-router states
       $stateProvider
+
+        // The state that lists the categories
         .state('portal.admin.categories', {
           url: '/categories',
-          templateUrl: '/subapps/admin/categories/categories.html',
+          templateUrl: '/subapps/admin/categories/templates/categories.html',
           authenticate: true,
           controller: categoriesCtrl
         })
+
+        // The detail page for a single category
         .state('portal.admin.categories.category', {
           url: '/categories/category-:id',
-          templateUrl: '/subapps/admin/categories/category/category.html',
+          templateUrl: '/subapps/admin/categories/templates/category.html',
           authenticate: true,
           controller: categoryCtrl
         });
     }
-  ]);
+  ];
 });

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/categories/templates/categories.html
----------------------------------------------------------------------
diff --git 
a/rave-portal-ng/src/subapps/admin/categories/templates/categories.html 
b/rave-portal-ng/src/subapps/admin/categories/templates/categories.html
new file mode 100644
index 0000000..7b47c21
--- /dev/null
+++ b/rave-portal-ng/src/subapps/admin/categories/templates/categories.html
@@ -0,0 +1,54 @@
+<article ui-view>
+  <h2>Categories</h2>
+  <table id="categoryList" class="table table-striped table-bordered 
table-condensed">
+    <thead>
+      <tr>
+        <th>Text</th>
+        <th>Created By</th>
+        <th>Date Created</th>
+        <th>Modified By</th>
+        <th>Date Modified</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr ng-repeat="category in categories">
+        <td>
+          <a ui-sref="portal.admin.categories.category({id: category.ID})">
+            {{ category.text }}
+          </a>
+        </td>
+        <td>
+          {{ category.createdUserName }}
+        </td>
+        <td>
+          {{ category.createdDate | date:'short' }}
+        </td>
+        <td>
+          {{ category.lastModifiedUserName }}
+        </td>
+        <td>
+          {{ category.lastModifiedDate | date:'short' }}
+        </td>
+      </tr>
+    </tbody>
+  </table>
+  <div>
+    <form id="createCategory" class="form-inline">
+      <fieldset>
+        <legend>
+          Create Category
+        </legend>
+        <div class="control-group">
+          <label class="control-label" for="text">
+            Text:
+          </label>
+          <div class="controls">
+            <input id="text" name="text" autofocus="autofocus" 
required="required" type="text" value="" ng-model="newText">&nbsp;
+            <button class="btn btn-primary" ng-click="onCreate()">Create 
Category</button>
+          </div>
+        </div>
+      </fieldset>
+    </form>
+  </div>
+</article>
+

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/categories/templates/category.html
----------------------------------------------------------------------
diff --git 
a/rave-portal-ng/src/subapps/admin/categories/templates/category.html 
b/rave-portal-ng/src/subapps/admin/categories/templates/category.html
new file mode 100644
index 0000000..585590c
--- /dev/null
+++ b/rave-portal-ng/src/subapps/admin/categories/templates/category.html
@@ -0,0 +1,14 @@
+<div>
+  <a ui-sref="portal.admin.categories">« Back to Categories</a>
+  <h2>Category – "{{ category.text }}"</h2>
+  <div class="well">
+    <section>
+      <label for="text">Name: </label>
+      <input id="text" name="text" type="text" ng-model="text">
+      <br><br>
+      <button class="btn" ng-click="onSave()">Save</button>
+      <button class="btn btn-danger" ng-click="onDelete()">Delete</button>
+    </section>
+  </div>  
+</div>
+      

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/home/home.html
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/home/home.html 
b/rave-portal-ng/src/subapps/admin/home/home.html
deleted file mode 100644
index dd351fd..0000000
--- a/rave-portal-ng/src/subapps/admin/home/home.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<article>
-  <h2>
-    Welcome to the Rave admin interface
-  </h2>
-  <p>
-    For help, go to the <a 
href="http://rave.apache.org/documentation/admin-interface.html"; 
target="_blank">documentation site</a>.
-  </p>
-</article>

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/home/home.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/home/home.js 
b/rave-portal-ng/src/subapps/admin/home/home.js
new file mode 100644
index 0000000..93f2495
--- /dev/null
+++ b/rave-portal-ng/src/subapps/admin/home/home.js
@@ -0,0 +1,28 @@
+/*
+ * home
+ * A module for the index page of the admin section of the site.
+ * It's a simple section that just displays a link to the documentation.
+ *
+ */
+
+define(function(require) {
+  var ng = require('angular');
+
+  // Our module dependencies
+  require('uiRouter');
+
+  // The array of names for Angular's dependency injection
+  var homeDependencies = [
+    'ui.router'
+  ];
+
+  // Create our module
+  var home = ng.module('admin.home', homeDependencies);
+
+  // Register the routes
+  var routes = require('./routes');
+  home.config(routes);
+
+  // Export the module
+  return home;
+});

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/home/routes.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/home/routes.js 
b/rave-portal-ng/src/subapps/admin/home/routes.js
new file mode 100644
index 0000000..4a6a3a7
--- /dev/null
+++ b/rave-portal-ng/src/subapps/admin/home/routes.js
@@ -0,0 +1,20 @@
+/*
+ * routes
+ * The UI states for the homepage of the admin section
+ *
+ */
+
+define(function(require) {
+  return ['$stateProvider', '$urlRouterProvider',
+    function($stateProvider, $urlRouterProvider) {
+
+      // The state for the home page
+      $stateProvider.state('portal.admin.home', {
+          url: '/',
+          templateUrl: '/subapps/admin/home/templates/home.html',
+          authenticate: true
+        });
+    }
+  ];
+});
+

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/home/templates/home.html
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/home/templates/home.html 
b/rave-portal-ng/src/subapps/admin/home/templates/home.html
new file mode 100644
index 0000000..dd351fd
--- /dev/null
+++ b/rave-portal-ng/src/subapps/admin/home/templates/home.html
@@ -0,0 +1,8 @@
+<article>
+  <h2>
+    Welcome to the Rave admin interface
+  </h2>
+  <p>
+    For help, go to the <a 
href="http://rave.apache.org/documentation/admin-interface.html"; 
target="_blank">documentation site</a>.
+  </p>
+</article>

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/index.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/index.js 
b/rave-portal-ng/src/subapps/admin/index.js
deleted file mode 100644
index 85dedfd..0000000
--- a/rave-portal-ng/src/subapps/admin/index.js
+++ /dev/null
@@ -1,8 +0,0 @@
-define(function(require) {
-  require('./admin');
-  require('./routes');
-  require('./categories/routes');
-  require('./preferences/routes');
-  require('./users/routes');
-  require('./widgets/routes');
-});

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/preferences/controllers/preferences.js
----------------------------------------------------------------------
diff --git 
a/rave-portal-ng/src/subapps/admin/preferences/controllers/preferences.js 
b/rave-portal-ng/src/subapps/admin/preferences/controllers/preferences.js
index 62942c9..950da46 100644
--- a/rave-portal-ng/src/subapps/admin/preferences/controllers/preferences.js
+++ b/rave-portal-ng/src/subapps/admin/preferences/controllers/preferences.js
@@ -1,3 +1,9 @@
+/*
+ * preferencesController
+ * Manages submission of our form; also handles the data binding.
+ *
+ */
+
 define(function(require) {
   var _ = require('underscore');
 

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/preferences/preferences.html
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/preferences/preferences.html 
b/rave-portal-ng/src/subapps/admin/preferences/preferences.html
deleted file mode 100644
index cf81711..0000000
--- a/rave-portal-ng/src/subapps/admin/preferences/preferences.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<article ui-view>
-  <h2>Preferences</h2>
-  <form id="preferenceForm" class="form-horizontal">
-    <p>Field marked with * are required</p>
-    <div class="control-group">
-      <label for="titleSuffix.value" class="control-label">
-        Page title suffix
-      </label>
-      <div class="controls">
-        <input id="titleSuffix.value" name="titleSuffix.value" type="text" 
ng-model="preferences.titleSuffix">
-      </div>
-    </div>
-    <div class="control-group">
-      <label for="pageSize" class="control-label">
-        Number of items per page (list) *
-      </label>
-      <div class="controls">
-        <input id="pageSize" name="pageSize.value" type="number" step="1" 
ng-model="preferences.pageSize">
-      </div>
-    </div>
-    <div class="control-group">
-      <label for="defaultWidgetHeight" class="control-label">
-        Default widget height *
-      </label>
-      <div class="controls">
-        <input id="defaultWidgetHeight" name="defaultWidgetHeight.value" 
type="number" step="1" ng-model="preferences.defaultWidgetHeight">
-      </div>
-    </div>
-    <div class="control-group">
-      <label for="javaScriptDebugMode.value" class="control-label">
-        JavaScript Debug Mode *
-      </label>
-      <div class="controls">
-        <select id="javaScriptDebugMode" name="javaScriptDebugMode.value" 
ng-model="preferences.javascriptDebugMode">
-          <option value="0">Disabled</option>
-          <option value="1">Enabled</option>
-        </select>
-      </div>
-    </div>
-    <div class="control-group">
-      <label for="initialWidgetStatus.value" class="control-label">
-        Initial status to use for new widgets *
-      </label>
-      <div class="controls">
-        <select id="initialWidgetStatus" name="initialWidgetStatus.value" 
ng-model="preferences.initialWidgetStatus">
-          <option value="preview">
-            Preview
-          </option>
-          <option value="published">
-            Published
-          </option>
-        </select>
-      </div>
-    </div>                      
-    <div class="control-group">
-      <label for="externalMarketplaceUrl.value" class="control-label">
-        Location (URL) of external widget marketplace
-      </label>
-      <div class="controls">
-        <input id="externalMarketplaceUrl.value" 
name="externalMarketplaceUrl.value" type="text" 
ng-model="preferences.externalMarketplaceUrl">
-      </div>
-    </div>
-    <fieldset>
-      <button class="btn btn-primary" ng-click="onSubmit()">Update 
preferences</button>
-    </fieldset>
-  </form>
-</article>

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/preferences/preferences.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/preferences/preferences.js 
b/rave-portal-ng/src/subapps/admin/preferences/preferences.js
new file mode 100644
index 0000000..3f0f399
--- /dev/null
+++ b/rave-portal-ng/src/subapps/admin/preferences/preferences.js
@@ -0,0 +1,34 @@
+/*
+ * preferences
+ * A module for the admin preferences page.
+ *
+ */
+
+define(function(require) {
+  var ng = require('angular');
+
+  // Our module dependencies
+  require('uiRouter');
+
+  // The array of names for Angular's dependency injection
+  var preferencesDependencies = [
+    'ui.router'
+  ];
+
+  // Create our module
+  var preferences = ng.module('admin.preferences', preferencesDependencies);
+
+  // Register our providers for the preferences
+  var preferencesResource = require('./resources/preferences');
+  preferences.factory('preferencesResource', preferencesResource);
+
+  var preferencesCtrl = require('./controllers/preferences');
+  preferences.controller('preferencesCtrl', preferencesCtrl);
+
+  // Register the routes
+  var routes = require('./routes');
+  preferences.config(routes);
+
+  // Export the module
+  return preferences;
+});

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/preferences/resources/preferences.js
----------------------------------------------------------------------
diff --git 
a/rave-portal-ng/src/subapps/admin/preferences/resources/preferences.js 
b/rave-portal-ng/src/subapps/admin/preferences/resources/preferences.js
index c068227..63a5e05 100644
--- a/rave-portal-ng/src/subapps/admin/preferences/resources/preferences.js
+++ b/rave-portal-ng/src/subapps/admin/preferences/resources/preferences.js
@@ -1,3 +1,9 @@
+/*
+ * preferences-resource
+ * A resource for the Rave preferences.
+ *
+ */
+
 define(function(require) {
 
   // The API endpoint for categories

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/preferences/routes.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/preferences/routes.js 
b/rave-portal-ng/src/subapps/admin/preferences/routes.js
index 2ce7dda..7e68e26 100644
--- a/rave-portal-ng/src/subapps/admin/preferences/routes.js
+++ b/rave-portal-ng/src/subapps/admin/preferences/routes.js
@@ -1,18 +1,25 @@
+/*
+ * routes
+ * Routes for this subapp. Rave uses the Angular-UI UI-Router
+ * library for routing, so be sure to familiarize yourself
+ * with that library.
+ *
+ */
+
 define(function(require) {
-  require('../admin');
-  var angular = require('angular');
   var preferencesCtrl = require('./controllers/preferences');
 
-  angular.module('admin').config([
+  return [
     '$stateProvider', '$urlRouterProvider',
     function($stateProvider, $urlRouterProvider) {
-      $stateProvider
-        .state('portal.admin.preferences', {
+
+      // Our preferences state
+      $stateProvider.state('portal.admin.preferences', {
           url: '/preferences',
-          templateUrl: '/subapps/admin/preferences/preferences.html',
+          templateUrl: '/subapps/admin/preferences/templates/preferences.html',
           authenticate: true,
           controller: preferencesCtrl
         });
     }
-  ]);
+  ];
 });

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/preferences/templates/preferences.html
----------------------------------------------------------------------
diff --git 
a/rave-portal-ng/src/subapps/admin/preferences/templates/preferences.html 
b/rave-portal-ng/src/subapps/admin/preferences/templates/preferences.html
new file mode 100644
index 0000000..cf81711
--- /dev/null
+++ b/rave-portal-ng/src/subapps/admin/preferences/templates/preferences.html
@@ -0,0 +1,67 @@
+<article ui-view>
+  <h2>Preferences</h2>
+  <form id="preferenceForm" class="form-horizontal">
+    <p>Field marked with * are required</p>
+    <div class="control-group">
+      <label for="titleSuffix.value" class="control-label">
+        Page title suffix
+      </label>
+      <div class="controls">
+        <input id="titleSuffix.value" name="titleSuffix.value" type="text" 
ng-model="preferences.titleSuffix">
+      </div>
+    </div>
+    <div class="control-group">
+      <label for="pageSize" class="control-label">
+        Number of items per page (list) *
+      </label>
+      <div class="controls">
+        <input id="pageSize" name="pageSize.value" type="number" step="1" 
ng-model="preferences.pageSize">
+      </div>
+    </div>
+    <div class="control-group">
+      <label for="defaultWidgetHeight" class="control-label">
+        Default widget height *
+      </label>
+      <div class="controls">
+        <input id="defaultWidgetHeight" name="defaultWidgetHeight.value" 
type="number" step="1" ng-model="preferences.defaultWidgetHeight">
+      </div>
+    </div>
+    <div class="control-group">
+      <label for="javaScriptDebugMode.value" class="control-label">
+        JavaScript Debug Mode *
+      </label>
+      <div class="controls">
+        <select id="javaScriptDebugMode" name="javaScriptDebugMode.value" 
ng-model="preferences.javascriptDebugMode">
+          <option value="0">Disabled</option>
+          <option value="1">Enabled</option>
+        </select>
+      </div>
+    </div>
+    <div class="control-group">
+      <label for="initialWidgetStatus.value" class="control-label">
+        Initial status to use for new widgets *
+      </label>
+      <div class="controls">
+        <select id="initialWidgetStatus" name="initialWidgetStatus.value" 
ng-model="preferences.initialWidgetStatus">
+          <option value="preview">
+            Preview
+          </option>
+          <option value="published">
+            Published
+          </option>
+        </select>
+      </div>
+    </div>                      
+    <div class="control-group">
+      <label for="externalMarketplaceUrl.value" class="control-label">
+        Location (URL) of external widget marketplace
+      </label>
+      <div class="controls">
+        <input id="externalMarketplaceUrl.value" 
name="externalMarketplaceUrl.value" type="text" 
ng-model="preferences.externalMarketplaceUrl">
+      </div>
+    </div>
+    <fieldset>
+      <button class="btn btn-primary" ng-click="onSubmit()">Update 
preferences</button>
+    </fieldset>
+  </form>
+</article>

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/routes.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/routes.js 
b/rave-portal-ng/src/subapps/admin/routes.js
index bd9a86c..22f7d1f 100644
--- a/rave-portal-ng/src/subapps/admin/routes.js
+++ b/rave-portal-ng/src/subapps/admin/routes.js
@@ -1,22 +1,22 @@
-define(function(require) {
-  require('./admin');
-  var angular = require('angular');
+/*
+ * routes
+ * Routes for this subapp. Rave uses the Angular-UI UI-Router
+ * library for routing, so be sure to familiarize yourself
+ * with that library.
+ *
+ */
 
-  angular.module('admin').config([
-    '$stateProvider', '$urlRouterProvider',
+define(function(require) {
+  return ['$stateProvider', '$urlRouterProvider',
     function($stateProvider, $urlRouterProvider) {
-      $stateProvider
-        .state('portal.admin', {
+
+      // The base state for the admin page
+      $stateProvider.state('portal.admin', {
           url: '/app/admin',
-          templateUrl: '/subapps/admin/admin.html',
-          authenticate: true
-        })
-        .state('portal.admin.home', {
-          url: '/',
-          templateUrl: '/subapps/admin/home/home.html',
+          templateUrl: '/subapps/admin/templates/admin.html',
           authenticate: true
         });
     }
-  ]);
+  ];
 });
 

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/templates/admin.html
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/templates/admin.html 
b/rave-portal-ng/src/subapps/admin/templates/admin.html
new file mode 100644
index 0000000..ab35e20
--- /dev/null
+++ b/rave-portal-ng/src/subapps/admin/templates/admin.html
@@ -0,0 +1,37 @@
+<div class="row-fluid">
+  <div class="span2">
+    <nav>
+      <div class="tabbable">
+        <ul class="nav nav-tabs nav-stacked">
+          <li ng-class="{ active: $state.includes('portal.admin.home') }">
+            <a ui-sref="portal.admin.home">
+              Home
+            </a>
+          </li>
+          <li ng-class="{ active: $state.includes('portal.admin.users') }">
+            <a ui-sref="portal.admin.users({page:1})">
+              Users
+            </a>
+          </li>
+          <li ng-class="{ active: $state.includes('portal.admin.widgets') }">
+            <a ui-sref="portal.admin.widgets({page:1})">
+              Widgets
+            </a>
+          </li>
+          <li ng-class="{ active: $state.includes('portal.admin.preferences') 
}">
+            <a ui-sref="portal.admin.preferences">
+              Preferences
+            </a>
+          </li>
+          <li ng-class="{ active: $state.includes('portal.admin.categories') 
}">
+            <a ui-sref="portal.admin.categories">
+              Categories
+            </a>
+          </li>
+        </ul>
+      </div>
+    </nav>
+  </div>
+  <div class="span10" ui-view>
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/users/controllers/users.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/users/controllers/users.js 
b/rave-portal-ng/src/subapps/admin/users/controllers/users.js
index 668ed14..e035516 100644
--- a/rave-portal-ng/src/subapps/admin/users/controllers/users.js
+++ b/rave-portal-ng/src/subapps/admin/users/controllers/users.js
@@ -1,3 +1,9 @@
+/*
+ * usersController
+ * Sets up our data & pagination.
+ *
+ */
+
 define(function(require) {
   return ['$scope', '$stateParams', 'pagination',
   function($scope, $stateParams, pagination) {

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/users/detail/detail.html
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/users/detail/detail.html 
b/rave-portal-ng/src/subapps/admin/users/detail/detail.html
deleted file mode 100644
index 847d84e..0000000
--- a/rave-portal-ng/src/subapps/admin/users/detail/detail.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<a ui-sref="portal.admin.users">
-  « Back to users
-</a>
-<h2>canonical</h2>
-<div>
-  <section>
-    <form id="updateUserProfile" class="form-horizontal" action="update" 
method="POST">
-      <fieldset>
-        <legend>Edit user data</legend>
-        <br>
-        <input id="username" name="username" type="hidden" value="canonical">
-        <div class="control-group">
-          <label class="control-label" for="email">Email address:</label>
-          <div class="controls">
-            <input type="email" name="email" id="email" 
value="[email protected]" class="long">
-          </div>
-        </div>
-        <div class="control-group">
-          <label class="control-label" for="openIdField">OpenID URL:</label>
-          <div class="controls">
-            <input type="url" id="openIdField" name="openId" value="" 
class="long">
-          </div>
-        </div>
-        <div class="control-group">
-          <span class="control-label">Account status:</span>
-          <ul class="checkboxlist">
-            <li>
-              <input id="enabled1" name="enabled" disabled="disabled" 
type="checkbox" value="true" checked="checked">
-              <label for="enabled1">Account enabled</label>
-            </li>
-            <li>
-              <input id="expired1" name="expired" disabled="disabled" 
type="checkbox" value="true">
-              <label for="expired1">Account expired</label>
-            </li>
-            <li>
-              <input id="locked1" name="locked" disabled="disabled" 
type="checkbox" value="true">
-              <label for="locked1">Account locked</label>
-            </li>
-          </ul>
-        </div>
-      </fieldset>
-      <fieldset>
-        <span class="control-label">Authorities:</span>
-        <ul class="checkboxlist">
-          <li>
-            <input id="authorities1" name="authorities" type="checkbox" 
value="ROLE_USER">
-            <label for="authorities1">ROLE_USER</label>
-          </li>
-          <li>
-            <input id="authorities2" name="authorities" type="checkbox" 
value="ROLE_ADMIN" checked="checked">
-            <label for="authorities2">ROLE_ADMIN</label>
-          </li>
-        </ul>
-      </fieldset>
-      <fieldset>
-        <button class="btn btn-primary" type="submit" value="Update 
profile">Update profile</button>
-      </fieldset>
-    </form>
-  </section>
-</div>
-<div class="clear-float"></div>

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/users/routes.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/users/routes.js 
b/rave-portal-ng/src/subapps/admin/users/routes.js
index aa7a837..b0816a7 100644
--- a/rave-portal-ng/src/subapps/admin/users/routes.js
+++ b/rave-portal-ng/src/subapps/admin/users/routes.js
@@ -1,23 +1,32 @@
+/*
+ * routes
+ * Routes for this subapp. Rave uses the Angular-UI UI-Router
+ * library for routing, so be sure to familiarize yourself
+ * with that library.
+ *
+ */
+
 define(function(require) {
-  require('../admin');
-  var angular = require('angular');
   var usersCtrl = require('./controllers/users');
 
-  angular.module('admin').config([
-    '$stateProvider', '$urlRouterProvider',
+  return ['$stateProvider', '$urlRouterProvider',
     function($stateProvider, $urlRouterProvider) {
       $stateProvider
+
+        // The main state. Displays our list of users.
         .state('portal.admin.users', {
           url: '/users?page',
-          templateUrl: '/subapps/admin/users/users.html',
+          templateUrl: '/subapps/admin/users/templates/users.html',
           authenticate: true,
           controller: usersCtrl
         })
+
+        // Show a particular user's profile
         .state('portal.admin.users.detail', {
           url: '/users/detail-:id',
-          templateUrl: '/subapps/admin/users/detail/detail.html',
+          templateUrl: '/subapps/admin/users/templates/detail.html',
           authenticate: true
         });
     }
-  ]);
+  ];
 });

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/users/templates/detail.html
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/users/templates/detail.html 
b/rave-portal-ng/src/subapps/admin/users/templates/detail.html
new file mode 100644
index 0000000..847d84e
--- /dev/null
+++ b/rave-portal-ng/src/subapps/admin/users/templates/detail.html
@@ -0,0 +1,61 @@
+<a ui-sref="portal.admin.users">
+  « Back to users
+</a>
+<h2>canonical</h2>
+<div>
+  <section>
+    <form id="updateUserProfile" class="form-horizontal" action="update" 
method="POST">
+      <fieldset>
+        <legend>Edit user data</legend>
+        <br>
+        <input id="username" name="username" type="hidden" value="canonical">
+        <div class="control-group">
+          <label class="control-label" for="email">Email address:</label>
+          <div class="controls">
+            <input type="email" name="email" id="email" 
value="[email protected]" class="long">
+          </div>
+        </div>
+        <div class="control-group">
+          <label class="control-label" for="openIdField">OpenID URL:</label>
+          <div class="controls">
+            <input type="url" id="openIdField" name="openId" value="" 
class="long">
+          </div>
+        </div>
+        <div class="control-group">
+          <span class="control-label">Account status:</span>
+          <ul class="checkboxlist">
+            <li>
+              <input id="enabled1" name="enabled" disabled="disabled" 
type="checkbox" value="true" checked="checked">
+              <label for="enabled1">Account enabled</label>
+            </li>
+            <li>
+              <input id="expired1" name="expired" disabled="disabled" 
type="checkbox" value="true">
+              <label for="expired1">Account expired</label>
+            </li>
+            <li>
+              <input id="locked1" name="locked" disabled="disabled" 
type="checkbox" value="true">
+              <label for="locked1">Account locked</label>
+            </li>
+          </ul>
+        </div>
+      </fieldset>
+      <fieldset>
+        <span class="control-label">Authorities:</span>
+        <ul class="checkboxlist">
+          <li>
+            <input id="authorities1" name="authorities" type="checkbox" 
value="ROLE_USER">
+            <label for="authorities1">ROLE_USER</label>
+          </li>
+          <li>
+            <input id="authorities2" name="authorities" type="checkbox" 
value="ROLE_ADMIN" checked="checked">
+            <label for="authorities2">ROLE_ADMIN</label>
+          </li>
+        </ul>
+      </fieldset>
+      <fieldset>
+        <button class="btn btn-primary" type="submit" value="Update 
profile">Update profile</button>
+      </fieldset>
+    </form>
+  </section>
+</div>
+<div class="clear-float"></div>

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/users/templates/users.html
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/users/templates/users.html 
b/rave-portal-ng/src/subapps/admin/users/templates/users.html
new file mode 100644
index 0000000..97c1898
--- /dev/null
+++ b/rave-portal-ng/src/subapps/admin/users/templates/users.html
@@ -0,0 +1,60 @@
+<article ui-view>
+  <h2>
+    Showing {{ firstItem() }} - {{ lastItem() }} of {{ users.length }} results
+  </h2>
+  <div class="searchHeading paginationHeading">
+    <div class="pagination">
+    <ul>
+      <li ng-class="prevPageDisabled()">
+        <a ui-sref="portal.admin.users({page:currentPage-1})">&lt;</a>
+      </li>
+      <li ng-repeat="n in paginationPages(currentPage, pageCount)" ng-class="{ 
active: n == currentPage }">
+        <a ui-sref="portal.admin.users({page:n})">{{ n }}</a>
+      </li>
+      <li ng-class="nextPageDisabled()">
+        <a ui-sref="portal.admin.users({page:currentPage+1})">&gt;</a>
+      </li>
+    </ul>
+  </div>
+    <form class="form-horizontal search-form" 
action="/portal/app/admin/users/search" method="get">
+      <fieldset>
+        <div class="input-append">
+          <input class="input-medium" type="search" id="searchTerm" 
name="searchTerm" value="" placeholder="Search Users">
+          <button class="btn btn-primary" type="submit" 
value="Search">Search</button>
+        </div>
+      </fieldset>
+    </form>
+  </div>
+  <table class="table table-striped table-bordered table-condensed">
+    <thead>
+      <tr>
+        <th>Username</th>
+        <th>Email</th>
+        <th>Account Enabled</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr ng-repeat="user in users">
+        <td>
+          <a ui-sref="portal.admin.users.detail">
+            Username
+          </a>
+        </td>
+        <td>OpenSocial</td>
+        <td>published</td>
+      </tr>
+    </tbody>
+  </table>
+  <div class="pagination">
+  <ul>
+    <li ng-class="prevPageDisabled()">
+      <a ui-sref="portal.admin.users({page:currentPage-1})">&lt;</a>
+    </li>
+    <li ng-repeat="n in paginationPages(currentPage, pageCount)" ng-class="{ 
active: n == currentPage }">
+      <a ui-sref="portal.admin.users({page:n})">{{ n }}</a>
+    </li>
+    <li ng-class="nextPageDisabled()">
+      <a ui-sref="portal.admin.users({page:currentPage+1})">&gt;</a>
+    </li>
+  </ul>
+</article>

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/users/users.html
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/users/users.html 
b/rave-portal-ng/src/subapps/admin/users/users.html
deleted file mode 100644
index 97c1898..0000000
--- a/rave-portal-ng/src/subapps/admin/users/users.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<article ui-view>
-  <h2>
-    Showing {{ firstItem() }} - {{ lastItem() }} of {{ users.length }} results
-  </h2>
-  <div class="searchHeading paginationHeading">
-    <div class="pagination">
-    <ul>
-      <li ng-class="prevPageDisabled()">
-        <a ui-sref="portal.admin.users({page:currentPage-1})">&lt;</a>
-      </li>
-      <li ng-repeat="n in paginationPages(currentPage, pageCount)" ng-class="{ 
active: n == currentPage }">
-        <a ui-sref="portal.admin.users({page:n})">{{ n }}</a>
-      </li>
-      <li ng-class="nextPageDisabled()">
-        <a ui-sref="portal.admin.users({page:currentPage+1})">&gt;</a>
-      </li>
-    </ul>
-  </div>
-    <form class="form-horizontal search-form" 
action="/portal/app/admin/users/search" method="get">
-      <fieldset>
-        <div class="input-append">
-          <input class="input-medium" type="search" id="searchTerm" 
name="searchTerm" value="" placeholder="Search Users">
-          <button class="btn btn-primary" type="submit" 
value="Search">Search</button>
-        </div>
-      </fieldset>
-    </form>
-  </div>
-  <table class="table table-striped table-bordered table-condensed">
-    <thead>
-      <tr>
-        <th>Username</th>
-        <th>Email</th>
-        <th>Account Enabled</th>
-      </tr>
-    </thead>
-    <tbody>
-      <tr ng-repeat="user in users">
-        <td>
-          <a ui-sref="portal.admin.users.detail">
-            Username
-          </a>
-        </td>
-        <td>OpenSocial</td>
-        <td>published</td>
-      </tr>
-    </tbody>
-  </table>
-  <div class="pagination">
-  <ul>
-    <li ng-class="prevPageDisabled()">
-      <a ui-sref="portal.admin.users({page:currentPage-1})">&lt;</a>
-    </li>
-    <li ng-repeat="n in paginationPages(currentPage, pageCount)" ng-class="{ 
active: n == currentPage }">
-      <a ui-sref="portal.admin.users({page:n})">{{ n }}</a>
-    </li>
-    <li ng-class="nextPageDisabled()">
-      <a ui-sref="portal.admin.users({page:currentPage+1})">&gt;</a>
-    </li>
-  </ul>
-</article>

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/users/users.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/users/users.js 
b/rave-portal-ng/src/subapps/admin/users/users.js
new file mode 100644
index 0000000..779d6f1
--- /dev/null
+++ b/rave-portal-ng/src/subapps/admin/users/users.js
@@ -0,0 +1,31 @@
+/*
+ * users
+ * The module for the users page of the admin
+ *
+ */
+
+define(function(require) {
+  var ng = require('angular');
+
+  // Our module dependencies
+  require('uiRouter');
+
+  // The array of names for Angular's dependency injection
+  var usersDependencies = [
+    'ui.router'
+  ];
+
+  // Create our module
+  var users = ng.module('admin.users', usersDependencies);
+
+  // Register our providers for the users
+  var usersCtrl = require('./controllers/users');
+  users.controller('usersCtrl', usersCtrl);
+
+  // Register the routes
+  var routes = require('./routes');
+  users.config(routes);
+
+  // Export the module
+  return users;
+});

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/widgets/detail/detail.html
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/widgets/detail/detail.html 
b/rave-portal-ng/src/subapps/admin/widgets/detail/detail.html
deleted file mode 100644
index 8b1aaa0..0000000
--- a/rave-portal-ng/src/subapps/admin/widgets/detail/detail.html
+++ /dev/null
@@ -1,154 +0,0 @@
-<a ui-sref="portal.admin.widgets">
-  « Back to widgets
-</a>
-<h2>
-  Activity Stream
-</h2>
-<section class="formbox">
-  <form id="updateWidget" class="form-horizontal" action="update" 
method="POST">
-    <legend>
-      Edit widget data
-      <div class="control-group pull-right">
-        <div class="controls">
-          <a href="#" class="btn btn-warning storeItemButton" 
id="fetchMetadataButton">
-            Update widget metadata
-          </a>
-        </div>
-      </div>
-    </legend>
-    <p>
-      Field marked with * are required
-    </p>
-    <div class="control-group">
-      <label for="title" class="control-label">
-        Title *
-      </label>
-      <div class="controls">
-        <input id="title" name="title" class="long" autofocus="autofocus" 
required="required" type="text" value="Activity Stream">
-      </div>
-    </div>
-    <div class="control-group">
-      <label for="url" class="control-label">
-        Location (URL) *
-      </label>
-      <div class="controls">
-        <input type="url" name="url" id="url" 
placeholder="http://example.com/widget.xml"; required="required" class="long" 
value="https://raw.github.com/OpenSocial/examples/master/gadgets/activitystream/gadget.xml";>
-      </div>
-    </div>
-    <div class="control-group">
-        <label for="type1" class="control-label">
-          Type *
-        </label> 
-        <div class="controls">
-          <label for="type1" class="radio">
-            <input id="type1" name="type" type="radio" value="OpenSocial" 
checked="checked">
-            &nbsp; OpenSocial
-          </label> 
-          <label for="type2" class="radio">
-            <input id="type2" name="type" type="radio" value="W3C">
-            &nbsp; W3C Widget
-          </label>
-        </div>
-    </div>
-    <div class="control-group">
-      <label for="description" class="control-label">
-        Description *
-      </label>
-      <div class="controls">
-        <textarea id="description" name="description" class="long" 
required="required">
-          OpenSocial Activity Stream gadget with support for Embedded 
Experiences
-        </textarea>
-      </div>
-    </div>
-    <div class="control-group">
-      <label for="featured" class="control-label">
-        Featured
-      </label>
-      <div class="controls">
-        <input id="featured" name="featured" type="checkbox" value="true" 
checked="checked">
-        <input type="hidden" name="_featured" value="on">
-      </div>
-    </div>
-    <div class="control-group">
-      <label for="disableRendering" class="control-label">
-        Disable Widget
-      </label>
-      <div class="controls">
-        <input id="disableRendering" name="disableRendering" type="checkbox" 
value="true">
-        <input type="hidden" name="_disableRendering" value="on">
-      </div>
-    </div>
-    <div class="control-group">
-      <label for="disableRenderingMessage" class="control-label">
-        Disable Widget Message
-      </label>
-      <div class="controls">
-        <input id="disableRenderingMessage" name="disableRenderingMessage" 
class="long" autofocus="autofocus" type="text" value="">
-      </div>
-    </div>
-    <div class="control-group">
-      <label for="widgetStatus" class="control-label">
-        Status
-      </label>
-      <div class="controls">
-        <select id="widgetStatus" name="widgetStatus">
-          <option value="PUBLISHED" selected="selected">PUBLISHED</option>
-          <option value="PREVIEW">PREVIEW</option>
-        </select>
-      </div>
-    </div>
-    <div class="control-group">
-      <label for="categories" class="control-label">Categories:</label>
-        <div class="controls">
-          <select id="categories" name="categories" multiple="multiple" 
size="10">
-            <option value="5">Communications</option>
-            <option value="2">News</option>
-            <option value="4">Projects</option>
-            <option value="1">Technology</option>
-            <option value="3">Travel</option>
-          </select>
-        <input type="hidden" name="_categories" value="1">
-      </div>
-    </div>
-    <div class="control-group">
-      <label for="thumbnailUrl" class="control-label">
-        Thumbnail</label>
-      <div class="controls">
-        <input type="url" name="thumbnailUrl" id="thumbnailUrl" 
placeholder="http://example.com/thumbnail.png"; class="long" value="">
-      </div>
-    </div>
-    <div class="control-group">
-      <label for="screenshotUrl" class="control-label">
-        Screenshot
-      </label>
-      <div class="controls">
-        <input type="url" name="screenshotUrl" id="screenshotUrl" 
placeholder="http://example.com/screenshot.png"; class="long" value="">
-      </div>
-    </div>
-    <div class="control-group">
-      <label for="titleUrl" class="control-label">
-        URL the widget title links to
-      </label>
-      <div class="controls">
-        <input type="url" name="titleUrl" id="titleUrl" class="long" value="">
-      </div>
-    </div>
-    <div class="control-group">
-      <label for="author" class="control-label">Author</label>
-      <div class="controls">
-        <input id="author" name="author" class="long" type="text" 
value="OpenSocial Foundation">
-      </div>
-    </div>
-    <div class="control-group">
-      <label for="authorEmail" class="control-label">
-        Author's email address
-      </label>
-      <div class="controls">
-        <input type="email" name="authorEmail" id="authorEmail" class="long" 
value="">
-      </div>
-    </div>
-    <fieldset>
-      <button class="btn btn-primary" type="submit" value="Update 
widget">Update widget</button>
-    </fieldset>
-  </form>
-</section>

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/widgets/routes.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/widgets/routes.js 
b/rave-portal-ng/src/subapps/admin/widgets/routes.js
index 2f2ca67..76af9f3 100644
--- a/rave-portal-ng/src/subapps/admin/widgets/routes.js
+++ b/rave-portal-ng/src/subapps/admin/widgets/routes.js
@@ -1,14 +1,18 @@
-define(function(require) {
-  require('../admin');
-  var angular = require('angular');
+/*
+ * routes
+ * Routes for this subapp. Rave uses the Angular-UI UI-Router
+ * library for routing, so be sure to familiarize yourself
+ * with that library.
+ *
+ */
 
-  angular.module('admin').config([
-    '$stateProvider', '$urlRouterProvider',
+define(function(require) {
+  return ['$stateProvider', '$urlRouterProvider',
     function($stateProvider, $urlRouterProvider) {
       $stateProvider
         .state('portal.admin.widgets', {
           url: '/widgets',
-          templateUrl: '/subapps/admin/widgets/widgets.html',
+          templateUrl: '/subapps/admin/widgets/templates/widgets.html',
           authenticate: true,
           controller: function($scope) {
             $scope.currentPage = 0;
@@ -40,9 +44,9 @@ define(function(require) {
         })
         .state('portal.admin.widgets.detail', {
           url: '/widgets/detail-:id',
-          templateUrl: '/subapps/admin/widgets/detail/detail.html',
+          templateUrl: '/subapps/admin/widgets/templates/detail.html',
           authenticate: true
         });
     }
-  ]);
+  ];
 });

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/widgets/templates/detail.html
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/widgets/templates/detail.html 
b/rave-portal-ng/src/subapps/admin/widgets/templates/detail.html
new file mode 100644
index 0000000..8b1aaa0
--- /dev/null
+++ b/rave-portal-ng/src/subapps/admin/widgets/templates/detail.html
@@ -0,0 +1,154 @@
+<a ui-sref="portal.admin.widgets">
+  « Back to widgets
+</a>
+<h2>
+  Activity Stream
+</h2>
+<section class="formbox">
+  <form id="updateWidget" class="form-horizontal" action="update" 
method="POST">
+    <legend>
+      Edit widget data
+      <div class="control-group pull-right">
+        <div class="controls">
+          <a href="#" class="btn btn-warning storeItemButton" 
id="fetchMetadataButton">
+            Update widget metadata
+          </a>
+        </div>
+      </div>
+    </legend>
+    <p>
+      Field marked with * are required
+    </p>
+    <div class="control-group">
+      <label for="title" class="control-label">
+        Title *
+      </label>
+      <div class="controls">
+        <input id="title" name="title" class="long" autofocus="autofocus" 
required="required" type="text" value="Activity Stream">
+      </div>
+    </div>
+    <div class="control-group">
+      <label for="url" class="control-label">
+        Location (URL) *
+      </label>
+      <div class="controls">
+        <input type="url" name="url" id="url" 
placeholder="http://example.com/widget.xml"; required="required" class="long" 
value="https://raw.github.com/OpenSocial/examples/master/gadgets/activitystream/gadget.xml";>
+      </div>
+    </div>
+    <div class="control-group">
+        <label for="type1" class="control-label">
+          Type *
+        </label> 
+        <div class="controls">
+          <label for="type1" class="radio">
+            <input id="type1" name="type" type="radio" value="OpenSocial" 
checked="checked">
+            &nbsp; OpenSocial
+          </label> 
+          <label for="type2" class="radio">
+            <input id="type2" name="type" type="radio" value="W3C">
+            &nbsp; W3C Widget
+          </label>
+        </div>
+    </div>
+    <div class="control-group">
+      <label for="description" class="control-label">
+        Description *
+      </label>
+      <div class="controls">
+        <textarea id="description" name="description" class="long" 
required="required">
+          OpenSocial Activity Stream gadget with support for Embedded 
Experiences
+        </textarea>
+      </div>
+    </div>
+    <div class="control-group">
+      <label for="featured" class="control-label">
+        Featured
+      </label>
+      <div class="controls">
+        <input id="featured" name="featured" type="checkbox" value="true" 
checked="checked">
+        <input type="hidden" name="_featured" value="on">
+      </div>
+    </div>
+    <div class="control-group">
+      <label for="disableRendering" class="control-label">
+        Disable Widget
+      </label>
+      <div class="controls">
+        <input id="disableRendering" name="disableRendering" type="checkbox" 
value="true">
+        <input type="hidden" name="_disableRendering" value="on">
+      </div>
+    </div>
+    <div class="control-group">
+      <label for="disableRenderingMessage" class="control-label">
+        Disable Widget Message
+      </label>
+      <div class="controls">
+        <input id="disableRenderingMessage" name="disableRenderingMessage" 
class="long" autofocus="autofocus" type="text" value="">
+      </div>
+    </div>
+    <div class="control-group">
+      <label for="widgetStatus" class="control-label">
+        Status
+      </label>
+      <div class="controls">
+        <select id="widgetStatus" name="widgetStatus">
+          <option value="PUBLISHED" selected="selected">PUBLISHED</option>
+          <option value="PREVIEW">PREVIEW</option>
+        </select>
+      </div>
+    </div>
+    <div class="control-group">
+      <label for="categories" class="control-label">Categories:</label>
+        <div class="controls">
+          <select id="categories" name="categories" multiple="multiple" 
size="10">
+            <option value="5">Communications</option>
+            <option value="2">News</option>
+            <option value="4">Projects</option>
+            <option value="1">Technology</option>
+            <option value="3">Travel</option>
+          </select>
+        <input type="hidden" name="_categories" value="1">
+      </div>
+    </div>
+    <div class="control-group">
+      <label for="thumbnailUrl" class="control-label">
+        Thumbnail</label>
+      <div class="controls">
+        <input type="url" name="thumbnailUrl" id="thumbnailUrl" 
placeholder="http://example.com/thumbnail.png"; class="long" value="">
+      </div>
+    </div>
+    <div class="control-group">
+      <label for="screenshotUrl" class="control-label">
+        Screenshot
+      </label>
+      <div class="controls">
+        <input type="url" name="screenshotUrl" id="screenshotUrl" 
placeholder="http://example.com/screenshot.png"; class="long" value="">
+      </div>
+    </div>
+    <div class="control-group">
+      <label for="titleUrl" class="control-label">
+        URL the widget title links to
+      </label>
+      <div class="controls">
+        <input type="url" name="titleUrl" id="titleUrl" class="long" value="">
+      </div>
+    </div>
+    <div class="control-group">
+      <label for="author" class="control-label">Author</label>
+      <div class="controls">
+        <input id="author" name="author" class="long" type="text" 
value="OpenSocial Foundation">
+      </div>
+    </div>
+    <div class="control-group">
+      <label for="authorEmail" class="control-label">
+        Author's email address
+      </label>
+      <div class="controls">
+        <input type="email" name="authorEmail" id="authorEmail" class="long" 
value="">
+      </div>
+    </div>
+    <fieldset>
+      <button class="btn btn-primary" type="submit" value="Update 
widget">Update widget</button>
+    </fieldset>
+  </form>
+</section>

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/widgets/templates/widgets.html
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/widgets/templates/widgets.html 
b/rave-portal-ng/src/subapps/admin/widgets/templates/widgets.html
new file mode 100644
index 0000000..8a23395
--- /dev/null
+++ b/rave-portal-ng/src/subapps/admin/widgets/templates/widgets.html
@@ -0,0 +1,81 @@
+<article ui-view>
+  <h2>
+    Showing {{ firstItem() }} - {{ lastItem() }} of {{ widgets.length }} 
results
+  </h2>
+  <div class="searchHeading paginationHeading">
+    <div class="pagination">
+      <ul>
+        <li class="active"><a href="#">1</a></li>
+        <li><a href="?offset=10&amp;referringPageId=1">2</a></li>
+        <li><a href="?offset=20&amp;referringPageId=1">3</a></li>
+        <li><a href="?offset=10&amp;referringPageId=1">&gt;</a></li>
+      </ul>
+    </div>
+    <form class="form-horizontal search-form" 
action="/portal/app/admin/widgets/search" method="get">
+      <fieldset>
+        <div class="input-append">
+          <input class="input-medium" type="search" id="searchTerm" 
name="searchTerm" value="" placeholder="Search Widgets">
+          <button class="btn btn-primary" type="submit" 
value="Search">Search</button>
+        </div>
+        <p>
+          <a href="#" data-toggle="collapse" data-target="#searchFilters">
+            Search Options...
+          </a>
+        </p>
+        <div id="searchFilters" class="collapse">
+          <select name="widgettype" id="widgettype" class="input-medium">
+            <option value="">
+              Choose Type...
+            </option>
+            <option value="OpenSocial">
+              OpenSocial
+            </option>
+            <option value="W3C">
+              W3C Widget
+            </option>
+          </select>
+          <select name="widgetstatus" id="widgetstatus" class="input-medium">
+            <option value="">
+              Choose Status...
+            </option>
+            <option value="published">
+              published
+            </option>
+            <option value="preview">
+              review
+            </option>
+          </select>
+        </div>
+      </fieldset>
+    </form>
+  </div>
+  <table class="table table-striped table-bordered table-condensed">
+    <thead>
+      <tr>
+        <th>Title</th>
+        <th>Type</th>
+        <th>Status</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr ng-repeat="widget in widgets | startFrom:currentPage*listSize | 
limitTo:listSize">
+        <td>
+          <a ui-sref="portal.admin.widgets.detail({id: {{ widget.id }}})">
+            {{ widget.name }}
+          </a>
+        </td>
+        <td>OpenSocial</td>
+        <td>published</td>
+      </tr>
+    </tbody>
+  </table>
+  <div class="pagination">
+    <ul>
+      <li class="active"><a href="#">1</a></li>
+      <li><a href="?offset=10&amp;referringPageId=1">2</a></li>
+      <li><a href="?offset=20&amp;referringPageId=1">3</a></li>
+      <li><a href="?offset=10&amp;referringPageId=1">&gt;</a></li>
+    </ul>
+  </div>
+
+</article>

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/widgets/widgets.html
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/widgets/widgets.html 
b/rave-portal-ng/src/subapps/admin/widgets/widgets.html
deleted file mode 100644
index 8a23395..0000000
--- a/rave-portal-ng/src/subapps/admin/widgets/widgets.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<article ui-view>
-  <h2>
-    Showing {{ firstItem() }} - {{ lastItem() }} of {{ widgets.length }} 
results
-  </h2>
-  <div class="searchHeading paginationHeading">
-    <div class="pagination">
-      <ul>
-        <li class="active"><a href="#">1</a></li>
-        <li><a href="?offset=10&amp;referringPageId=1">2</a></li>
-        <li><a href="?offset=20&amp;referringPageId=1">3</a></li>
-        <li><a href="?offset=10&amp;referringPageId=1">&gt;</a></li>
-      </ul>
-    </div>
-    <form class="form-horizontal search-form" 
action="/portal/app/admin/widgets/search" method="get">
-      <fieldset>
-        <div class="input-append">
-          <input class="input-medium" type="search" id="searchTerm" 
name="searchTerm" value="" placeholder="Search Widgets">
-          <button class="btn btn-primary" type="submit" 
value="Search">Search</button>
-        </div>
-        <p>
-          <a href="#" data-toggle="collapse" data-target="#searchFilters">
-            Search Options...
-          </a>
-        </p>
-        <div id="searchFilters" class="collapse">
-          <select name="widgettype" id="widgettype" class="input-medium">
-            <option value="">
-              Choose Type...
-            </option>
-            <option value="OpenSocial">
-              OpenSocial
-            </option>
-            <option value="W3C">
-              W3C Widget
-            </option>
-          </select>
-          <select name="widgetstatus" id="widgetstatus" class="input-medium">
-            <option value="">
-              Choose Status...
-            </option>
-            <option value="published">
-              published
-            </option>
-            <option value="preview">
-              review
-            </option>
-          </select>
-        </div>
-      </fieldset>
-    </form>
-  </div>
-  <table class="table table-striped table-bordered table-condensed">
-    <thead>
-      <tr>
-        <th>Title</th>
-        <th>Type</th>
-        <th>Status</th>
-      </tr>
-    </thead>
-    <tbody>
-      <tr ng-repeat="widget in widgets | startFrom:currentPage*listSize | 
limitTo:listSize">
-        <td>
-          <a ui-sref="portal.admin.widgets.detail({id: {{ widget.id }}})">
-            {{ widget.name }}
-          </a>
-        </td>
-        <td>OpenSocial</td>
-        <td>published</td>
-      </tr>
-    </tbody>
-  </table>
-  <div class="pagination">
-    <ul>
-      <li class="active"><a href="#">1</a></li>
-      <li><a href="?offset=10&amp;referringPageId=1">2</a></li>
-      <li><a href="?offset=20&amp;referringPageId=1">3</a></li>
-      <li><a href="?offset=10&amp;referringPageId=1">&gt;</a></li>
-    </ul>
-  </div>
-
-</article>

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/admin/widgets/widgets.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/widgets/widgets.js 
b/rave-portal-ng/src/subapps/admin/widgets/widgets.js
new file mode 100644
index 0000000..785bb84
--- /dev/null
+++ b/rave-portal-ng/src/subapps/admin/widgets/widgets.js
@@ -0,0 +1,27 @@
+/*
+ * widgets
+ * A module for the widgets section of the Admin.
+ *
+ */
+
+define(function(require) {
+  var ng = require('angular');
+
+  // Our module dependencies
+  require('uiRouter');
+
+  // The array of names for Angular's dependency injection
+  var widgetsDependencies = [
+    'ui.router'
+  ];
+
+  // Create our module
+  var widgets = ng.module('admin.widgets', widgetsDependencies);
+
+  // Register the routes
+  var routes = require('./routes');
+  widgets.config(routes);
+
+  // Export the module
+  return widgets;
+});

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/auth/api/api.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/auth/api/api.js 
b/rave-portal-ng/src/subapps/auth/api/api.js
new file mode 100644
index 0000000..87f0610
--- /dev/null
+++ b/rave-portal-ng/src/subapps/auth/api/api.js
@@ -0,0 +1,30 @@
+/*
+ * auth-Api
+ * The base API services for the auth module
+ *
+ */
+
+define(function(require) {
+  var ng = require('angular');
+
+  var api = require('../../../providers/api/api-route');
+
+  var authApiDependencies = [
+    api.name
+  ];
+
+  // Create the API as an Angular module
+  var authApi = ng.module('authApi', authApiDependencies);
+
+  var authApiBase = require('./services/auth-api-base');
+  authApi.value('authApiBase', authApiBase);
+
+  var authApiRoutes = require('./services/auth-api-routes');
+  authApi.factory('authApiRoutes', authApiRoutes);
+
+  var authApiService = require('./services/auth-api');
+  authApi.factory('authApi', authApiService);
+
+  // Return the module
+  return authApi;
+});

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/auth/api/services/auth-api-base.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/auth/api/services/auth-api-base.js 
b/rave-portal-ng/src/subapps/auth/api/services/auth-api-base.js
new file mode 100644
index 0000000..c7ebe51
--- /dev/null
+++ b/rave-portal-ng/src/subapps/auth/api/services/auth-api-base.js
@@ -0,0 +1,9 @@
+/*
+ * authApiBase
+ * The base route for API routes
+ *
+ */
+
+define(function(require) {
+  return 'auth/';
+});

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/auth/api/services/auth-api-routes.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/auth/api/services/auth-api-routes.js 
b/rave-portal-ng/src/subapps/auth/api/services/auth-api-routes.js
new file mode 100644
index 0000000..34e5e7c
--- /dev/null
+++ b/rave-portal-ng/src/subapps/auth/api/services/auth-api-routes.js
@@ -0,0 +1,18 @@
+/*
+ * authApiRoutes
+ * Defines our API routes in a single location.
+ *
+ */
+
+define(function(require) {
+  return ['apiRoute', 'authApiBase',
+    function(apiRoute, authApiBase) {
+      var base = apiRoute + authApiBase;
+      return {
+        login: base + 'login',
+        logout: base + 'logout',
+        verify: base + 'verify'
+      };
+    }
+  ];
+});

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/auth/api/services/auth-api.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/auth/api/services/auth-api.js 
b/rave-portal-ng/src/subapps/auth/api/services/auth-api.js
new file mode 100644
index 0000000..c34de6d
--- /dev/null
+++ b/rave-portal-ng/src/subapps/auth/api/services/auth-api.js
@@ -0,0 +1,29 @@
+/*
+ * authApi
+ * Exposes high-level methods for interacting with the remote API for 
authentication.
+ * All methods defer to $http and, consequently, return an HttpPromise.
+ *
+ * There is NEVER a need to use this service directly. Instead, all external 
auth-related
+ * activities should go through the securityService.
+ *
+ */
+
+define(function(require) {
+  return ['$http', 'authApiRoutes',
+    function($http, authApiRoutes) {
+
+      // Each of our auth routes.
+      return {
+        login: function(credentials) {
+          return $http.post(authApiRoutes.login, credentials);
+        },
+        logout: function() {
+          return $http.post(authApiRoutes.logout);
+        },
+        verify: function(token) {
+          return $http.post(authApiRoutes.verify, {token: token});
+        }
+      };
+    }
+  ];
+});

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/auth/auth.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/auth/auth.js 
b/rave-portal-ng/src/subapps/auth/auth.js
index 49fe2d7..fab4998 100644
--- a/rave-portal-ng/src/subapps/auth/auth.js
+++ b/rave-portal-ng/src/subapps/auth/auth.js
@@ -1,9 +1,36 @@
+/*
+ * auth
+ * An Angular module that serves as a container for all of our
+ * other auth-related modules.
+ *
+ */
+
 define(function(require) {
   var angular = require('angular');
 
-  var auth = angular.module('auth', [
-    'ipCookie'
-  ]);
+  // Ensure that our dependencies are loaded
+  require('angularCookie');
+
+  // Load the different modules that make up this subapp
+  var security = require('./security/security');
+  var logout = require('./logout/logout');
+  var login = require('./login/login');
+  var forgotPassword = require('./forgot-password/forgot-password');
+  var forgotUsername = require('./forgot-username/forgot-username');
+  var createAccount = require('./create-account/create-account');
+
+  // Define our array of dependencies for Angular's DI
+  var authDependencies = [
+    'ipCookie',
+    security.name,
+    logout.name,
+    login.name,
+    forgotPassword.name,
+    forgotUsername.name,
+    createAccount.name
+  ];
+
+  var auth = angular.module('auth', authDependencies);
 
   return auth;
 });

http://git-wip-us.apache.org/repos/asf/rave/blob/277e58a4/rave-portal-ng/src/subapps/auth/controllers/login-form.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/auth/controllers/login-form.js 
b/rave-portal-ng/src/subapps/auth/controllers/login-form.js
deleted file mode 100644
index d8bc1c6..0000000
--- a/rave-portal-ng/src/subapps/auth/controllers/login-form.js
+++ /dev/null
@@ -1,24 +0,0 @@
-define(function(require) {
-  var auth = require('../auth');
-  require('../services/security');
-
-  auth.controller('loginController', [
-    '$scope', 'security',
-    function($scope, security) {
-
-      // We call this method when they submit the form.
-      $scope.submit = function(credentials) {
-
-        // Otherwise, we attempt to log them in by delegating to the
-        // securityService. If it's successful, the security service
-        // handles the rest for us.
-        security.login(credentials)
-
-          // And if it errors, we catch it here. 
-          .catch(function() {
-            $scope.invalid = true;
-          });
-      };
-    }
-  ]);
-});

Reply via email to