Adds messaging to the Categories admin section.

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

Branch: refs/heads/angular
Commit: 0b2f9a16dba04667af567803669b3c34f2086870
Parents: 2e123d0
Author: Jmeas <[email protected]>
Authored: Thu Aug 14 18:34:12 2014 -0400
Committer: Jmeas <[email protected]>
Committed: Thu Aug 14 18:36:14 2014 -0400

----------------------------------------------------------------------
 bower.json                                      |  5 +-
 rave-portal-ng/src/config/requirejs.js          |  4 ++
 .../src/subapps/admin/categories/categories.js  |  7 ++-
 .../admin/categories/controllers/categories.js  |  8 ++-
 .../admin/categories/controllers/category.js    | 26 ++++++++--
 .../admin/categories/controllers/create.js      |  9 ++--
 .../src/subapps/admin/categories/routes.js      |  6 +++
 .../categories/services/categories-messages.js  | 53 ++++++++++++++++++++
 .../admin/categories/templates/categories.html  |  1 +
 .../admin/categories/templates/category.html    |  6 +--
 10 files changed, 109 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/rave/blob/0b2f9a16/bower.json
----------------------------------------------------------------------
diff --git a/bower.json b/bower.json
index dad944d..17b79d0 100644
--- a/bower.json
+++ b/bower.json
@@ -29,7 +29,8 @@
     "jquery": "^1.0",
     "angular-cookies": "~1.2.21",
     "angular-resource": "~1.2.21",
-    "angular-cookie": "~4.0.2"
+    "angular-cookie": "~4.0.2",
+    "angular-sanitize": "~1.2.22"
   },
   "devDependencies": {
     "angular-mocks": "~1.2.20",
@@ -39,6 +40,6 @@
     "moment": "~2.8.0"
   },
   "resolutions": {
-    "angular": "1.2.21"
+    "angular": "~1.2.20"
   }
 }

http://git-wip-us.apache.org/repos/asf/rave/blob/0b2f9a16/rave-portal-ng/src/config/requirejs.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/config/requirejs.js 
b/rave-portal-ng/src/config/requirejs.js
index 27577f4..99f7b64 100644
--- a/rave-portal-ng/src/config/requirejs.js
+++ b/rave-portal-ng/src/config/requirejs.js
@@ -12,6 +12,7 @@ require.config({
     localStorageDB: 'localStorageDB/localstoragedb',
     angularResource: 'angular-resource/angular-resource',
     angularCookie: 'angular-cookie/angular-cookie',
+    angularSanitize: 'angular-sanitize/angular-sanitize',
     moment: 'moment'
   },
 
@@ -38,6 +39,9 @@ require.config({
     angularResource: {
       deps: ['angular']
     },
+    angularSanitize: {
+      deps: ['angular']
+    },
     localStorageDB: {
       exports: 'localStorageDB'
     }

http://git-wip-us.apache.org/repos/asf/rave/blob/0b2f9a16/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
index a63af3b..0a35ee7 100644
--- a/rave-portal-ng/src/subapps/admin/categories/categories.js
+++ b/rave-portal-ng/src/subapps/admin/categories/categories.js
@@ -9,16 +9,21 @@ define(function(require) {
 
   // Our module dependencies
   require('uiRouter');
+  require('angularSanitize');
 
   // The array of names for Angular's dependency injection
   var categoriesDependencies = [
-    'ui.router'
+    'ui.router',
+    'ngSanitize'
   ];
 
   // Create our module
   var categories = ng.module('admin.categories', categoriesDependencies);
 
   // Register the providers for categories
+  var categoriesMessages = require('./services/categories-messages');
+  categories.factory('categoriesMessages', categoriesMessages);
+
   var categoriesResource = require('./resources/categories');
   categories.factory('categoriesResource', categoriesResource);
 

http://git-wip-us.apache.org/repos/asf/rave/blob/0b2f9a16/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 a0b1281..2c91c4c 100644
--- a/rave-portal-ng/src/subapps/admin/categories/controllers/categories.js
+++ b/rave-portal-ng/src/subapps/admin/categories/controllers/categories.js
@@ -5,8 +5,12 @@
  */
 
 define(function(require) {
-  return ['$scope', 'categoriesResource', '$stateParams', '$rootScope', 
'categoriesList',
-  function($scope, categoriesResource, $stateParams, $rootScope, 
categoriesList) {
+  return ['$scope', 'categoriesResource', '$stateParams', '$rootScope', 
'categoriesList', 'categoriesMessages',
+  function($scope, categoriesResource, $stateParams, $rootScope, 
categoriesList, categoriesMessages) {
     $scope.categories = categoriesList;
+
+    $scope.showMessage = categoriesMessages.showMessage;
+    $scope.messageHtml = categoriesMessages.messageHtml;
+    $scope.messageClassName = categoriesMessages.messageClassName;
   }];
 });

http://git-wip-us.apache.org/repos/asf/rave/blob/0b2f9a16/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 b6e3b38..12e6b85 100644
--- a/rave-portal-ng/src/subapps/admin/categories/controllers/category.js
+++ b/rave-portal-ng/src/subapps/admin/categories/controllers/category.js
@@ -7,8 +7,8 @@
 define(function(require) {
   var $ = require('jquery');
   
-  return ['$scope', 'categoryResource', '$state', '$stateParams', 'category',
-  function($scope, categoryResource, $state, $stateParams, category) {
+  return ['$scope', 'categoryResource', '$state', '$stateParams', 'category', 
'categoriesMessages',
+  function($scope, categoryResource, $state, $stateParams, category, 
categoriesMessages) {
     $scope.category = category;
 
     $scope.category.$promise.then(function(res) {
@@ -16,6 +16,11 @@ define(function(require) {
     }).catch(function(err) {
     });
 
+    // Whether or not the user has updated the text of the category
+    $scope.isUpdated = function() {
+      return $scope.text !== $scope.category.text;
+    };
+
     // Remove the category from the list of categories in the scope
     this.removeFromList = function() {
       var oldCategory = _.findWhere($scope.categories, {ID:+$stateParams.id});
@@ -34,14 +39,23 @@ define(function(require) {
     var ctrl = this;
 
     $scope.onSave = function() {
+
       var savedResource = categoryResource.update({
         id: $stateParams.id,
         text: $scope.text
       });
       
       savedResource.$promise
-        .then(ctrl.updateList)
-        .catch(function() {
+        .then(function(updatedResource) {
+          categoriesMessages.updateMessage({
+            newText: $scope.text,
+            oldText: $scope.category.text
+          });
+          ctrl.updateList(updatedResource);
+          $state.transitionTo('portal.admin.categories');
+        })
+        .catch(function(err) {
+          categoriesMessages.errorMessage(err.data);
         });
     };
 
@@ -52,11 +66,13 @@ define(function(require) {
 
       deletedResource.$promise
         .then(function() {
+          categoriesMessages.deleteMessage($scope.category.text);
           ctrl.removeFromList();
           $('#confirm-modal').modal('hide');
           $state.transitionTo('portal.admin.categories');
         })
-        .catch(function() {
+        .catch(function(err) {
+          categoriesMessages.errorMessage(err.data);
         });
     };
   }];

http://git-wip-us.apache.org/repos/asf/rave/blob/0b2f9a16/rave-portal-ng/src/subapps/admin/categories/controllers/create.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/categories/controllers/create.js 
b/rave-portal-ng/src/subapps/admin/categories/controllers/create.js
index cfb1c7d..c9a298a 100644
--- a/rave-portal-ng/src/subapps/admin/categories/controllers/create.js
+++ b/rave-portal-ng/src/subapps/admin/categories/controllers/create.js
@@ -5,8 +5,8 @@
  */
 
 define(function(require) {
-  return ['$scope', 'categoriesResource',
-  function($scope, categoriesResource) {
+  return ['$scope', 'categoriesResource', 'categoriesMessages',
+  function($scope, categoriesResource, categoriesMessages) {
     $scope.onCreate = function() {
       var newResource = categoriesResource.save({
         text: $scope.newText
@@ -14,9 +14,12 @@ define(function(require) {
 
       newResource.$promise
         .then(function() {
+          categoriesMessages.createMessage($scope.newText);
+          $scope.newText = '';
           $scope.categories.push(newResource);
         })
-        .catch(function() {
+        .catch(function(err) {
+          categoriesMessages.errorMessage(err.data);
         });
     };
   }];

http://git-wip-us.apache.org/repos/asf/rave/blob/0b2f9a16/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 a716076..7f007d3 100644
--- a/rave-portal-ng/src/subapps/admin/categories/routes.js
+++ b/rave-portal-ng/src/subapps/admin/categories/routes.js
@@ -20,6 +20,9 @@ define(function(require) {
           templateUrl: '/subapps/admin/categories/templates/categories.html',
           authenticate: true,
           controller: categoriesCtrl,
+          onExit: ['categoriesMessages', function(categoriesMessages) {
+            categoriesMessages.clearMessage();
+          }],
           resolve: {
             categoriesList: ['categoriesResource',
               function(categoriesResource) {
@@ -34,6 +37,9 @@ define(function(require) {
           templateUrl: '/subapps/admin/categories/templates/category.html',
           authenticate: true,
           controller: categoryCtrl,
+          onEnter: ['categoriesMessages', function(categoriesMessages) {
+            categoriesMessages.clearMessage();
+          }],
           resolve: {
             category: ['categoryResource', '$stateParams',
               function(categoryResource, $stateParams) {

http://git-wip-us.apache.org/repos/asf/rave/blob/0b2f9a16/rave-portal-ng/src/subapps/admin/categories/services/categories-messages.js
----------------------------------------------------------------------
diff --git 
a/rave-portal-ng/src/subapps/admin/categories/services/categories-messages.js 
b/rave-portal-ng/src/subapps/admin/categories/services/categories-messages.js
new file mode 100644
index 0000000..812b658
--- /dev/null
+++ 
b/rave-portal-ng/src/subapps/admin/categories/services/categories-messages.js
@@ -0,0 +1,53 @@
+/*
+ * categoriesMessages
+ * A service to show messages on the categories page. Because other
+ * states can cause messages to display (namely the category state),
+ * we need a service that's shared between the two.
+ *
+ */
+
+define(function() {
+  return function() {
+    var html = '';
+    var className = '';
+
+    return {
+      createMessage: function(createdText) {
+        html = 'Created category "<b>' + createdText + '</b>."';
+        className = 'alert-success';
+      },
+
+      updateMessage: function(updateData) {
+        html = 'Renamed "<b>' + updateData.oldText + '</b>" to "<b>' + 
updateData.newText + '</b>."';
+        className = 'alert-success';
+      },
+
+      deleteMessage: function(deletedText) {
+        html = 'Deleted "<b>' + deletedText + '</b>".';
+        className = 'alert-success';
+      },
+
+      errorMessage: function(error) {
+        html = error;
+        className = 'alert-danger';
+      },
+
+      clearMessage: function() {
+        html = null;
+        className = '';
+      },
+
+      showMessage: function() {
+        return html ? true : false;
+      },
+
+      messageHtml: function() {
+        return html;
+      },
+
+      messageClassName: function() {
+        return className;
+      }
+    };
+  };
+});

http://git-wip-us.apache.org/repos/asf/rave/blob/0b2f9a16/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
index 40f5bad..37223d8 100644
--- a/rave-portal-ng/src/subapps/admin/categories/templates/categories.html
+++ b/rave-portal-ng/src/subapps/admin/categories/templates/categories.html
@@ -1,5 +1,6 @@
 <article ui-view>
   <h2>Categories</h2>
+  <div class="alert" ng-class="messageClassName()" 
ng-bind-html="messageHtml()" ng-show="showMessage()"></div>
   <table id="categoryList" class="table table-striped table-bordered 
table-condensed">
     <thead>
       <tr>

http://git-wip-us.apache.org/repos/asf/rave/blob/0b2f9a16/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
index b179ad6..b051fd4 100644
--- a/rave-portal-ng/src/subapps/admin/categories/templates/category.html
+++ b/rave-portal-ng/src/subapps/admin/categories/templates/category.html
@@ -2,13 +2,13 @@
   <a ui-sref="portal.admin.categories">« Back to Categories</a>
   <h2>Category – "{{ category.text }}"</h2>
   <div class="well">
-    <section>
+    <form>
       <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-primary" ng-click="onSave()" 
ng-disabled="!isUpdated()">Save</button>
       <button class="btn btn-danger" data-toggle="modal" 
data-target="#confirm-modal">Delete</button>
-    </section>
+    </form>
   </div>  
   <div id="confirm-modal" class="modal hide" tabindex="-1" role="dialog" 
aria-hidden="true">
     <div class="modal-body">

Reply via email to