Adds preferences to Admin.

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

Branch: refs/heads/angular
Commit: c855ead09d6efdf65a2cd921abc68b21a44c1c57
Parents: e1f69e1
Author: Jmeas <[email protected]>
Authored: Thu Aug 7 16:10:09 2014 -0400
Committer: Jmeas <[email protected]>
Committed: Thu Aug 7 16:18:42 2014 -0400

----------------------------------------------------------------------
 rave-portal-ng/mock-api/bootstrap.js            |   5 +-
 .../database/import-data/preferences.js         |  36 +++---
 .../mock-api/modules/preference/get.js          |  46 --------
 .../mock-api/modules/preference/put.js          |  76 ------------
 .../mock-api/modules/preferences/get.js         |  14 +--
 .../mock-api/modules/preferences/put.js         |  56 +++++++++
 rave-portal-ng/src/subapps/admin/admin.js       |   8 ++
 .../admin/categories/resources/categories.js    |   3 +-
 .../preferences/controllers/preferences.js      |  47 ++++++++
 .../admin/preferences/detail/detail.html        |  80 -------------
 .../subapps/admin/preferences/preferences.html  | 118 ++++++++++---------
 .../admin/preferences/resources/preferences.js  |  25 ++++
 .../src/subapps/admin/preferences/routes.js     |   5 -
 13 files changed, 230 insertions(+), 289 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/rave/blob/c855ead0/rave-portal-ng/mock-api/bootstrap.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/mock-api/bootstrap.js 
b/rave-portal-ng/mock-api/bootstrap.js
index 98025b0..3a7cf5a 100644
--- a/rave-portal-ng/mock-api/bootstrap.js
+++ b/rave-portal-ng/mock-api/bootstrap.js
@@ -38,10 +38,7 @@ define(function(require) {
 
        // preferences
        require('./modules/preferences/get.js');
-
-       // preference
-       require('./modules/preference/get.js'); 
-       require('./modules/preference/put.js'); 
+       require('./modules/preferences/put.js');
 
        // pages
        require('./modules/pages/get.js');

http://git-wip-us.apache.org/repos/asf/rave/blob/c855ead0/rave-portal-ng/mock-api/database/import-data/preferences.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/mock-api/database/import-data/preferences.js 
b/rave-portal-ng/mock-api/database/import-data/preferences.js
index 18529bc..a885fa8 100644
--- a/rave-portal-ng/mock-api/database/import-data/preferences.js
+++ b/rave-portal-ng/mock-api/database/import-data/preferences.js
@@ -3,32 +3,38 @@ define(function(require) {
 
        return [
                {
-                       'key': 'titleSuffix',
-                       'values': [ ' - Rave' ]
+                       key: 'titleSuffix',
+      value: ' - Rave'
                },
+
                {
-                       'key': 'pageSize',
-                       'values': [ 10 ]
+                       key: 'pageSize',
+      value: 10
                },
+
                {
-                       'key': 'defaultWidgetHeight',
-                       'values': [ 250 ]
+                       key: 'defaultWidgetHeight',
+      value: 250
                },
+
                {
-                       'key': 'javaScriptDebugMode',
-                       'values': [ 1 ]
+                       key: 'showStackTrace',
+      value: 0
                },
+
                {
-                       'key': 'showStackTrace',
-                       'values': [ 1 ]
+                       key: 'javascriptDebugMode',
+      value: 0
                },
+
                {
-                       'key': 'initialWidgetStatus',
-                       'values': [ 'PREVIEW' ]
+                       key: 'initialWidgetStatus',
+                       value: 'preview'
                },
+
                {
-                       'key': 'externalMarketplaceUrl',
-                       'values': [ '' ]
+                       key: 'externalMarketplaceUrl',
+                       value: ''
                }
        ];
-});
\ No newline at end of file
+});

http://git-wip-us.apache.org/repos/asf/rave/blob/c855ead0/rave-portal-ng/mock-api/modules/preference/get.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/mock-api/modules/preference/get.js 
b/rave-portal-ng/mock-api/modules/preference/get.js
deleted file mode 100644
index 1d1c384..0000000
--- a/rave-portal-ng/mock-api/modules/preference/get.js
+++ /dev/null
@@ -1,46 +0,0 @@
-define(function(require) {
-       'use strict';
-
-       var api = require('../../core.js');
-       require('underscore/underscore');
-
-       function getPreferencesByKey(key) {
-               var results = api.db.query('preferences', {
-                       key: key
-               });
-
-               if (results.length === 1) {
-                       results = results[0];
-                       if (results.values.length === 1) {
-                               results.values = results.values[0];
-                       }
-                       return results;
-               }
-               return false;
-       }
-
-       function processRequest(method, url, data, headers) {
-               if (method !== 'GET') {
-                       return [405, 'Unknown request'];
-               } else if (!this.requestHasToken) {
-                       return [401, 'A valid token is required'];
-               } else if (!this.userIsAuthenticated) {
-                       return [401, 'Invalid token'];
-               }
-
-               var preferenceKey = url.replace('/api/v1/preference/', '');
-               if (!_.isString(preferenceKey)) {
-                       return [400, 'Invalid category ID'];
-               }
-
-               var preference = getPreferencesByKey(preferenceKey);
-               if (!preference) {
-                       return [404, 'Preference does not exist'];
-               }
-
-               return [200, preference];
-       }
-
-       api.register('/preference/:key', 'get', processRequest);
-
-} );
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/rave/blob/c855ead0/rave-portal-ng/mock-api/modules/preference/put.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/mock-api/modules/preference/put.js 
b/rave-portal-ng/mock-api/modules/preference/put.js
deleted file mode 100644
index f48bd64..0000000
--- a/rave-portal-ng/mock-api/modules/preference/put.js
+++ /dev/null
@@ -1,76 +0,0 @@
-define(function(require) {
-       'use strict';
-
-       var api = require('../../core.js');
-       require('underscore/underscore');
-
-       function preferenceExists(key) {
-               var results = api.db.query('preferences', {
-                       key: key
-               });
-
-               if (results.length === 1) {
-                       return true;
-               }
-               return false;
-       }
-
-       function updatePreference(key, values) {
-               var searchParams = {
-                       key: key
-               };
-
-               if (!_.isArray(values)) {
-                       values = [values];
-               }
-
-               api.db.update('preferences', searchParams, function(row) {
-                       row.values = values;
-                       return row;
-               });
-
-               var results = api.db.query('preferences', searchParams);
-               if (results.length === 1) {
-                       results = results[0];
-                       if (results.values.length === 1) {
-                               results.values = results.values[0];
-                       }
-                       return results;
-               }
-
-               return false;
-       }
-
-       function processRequest(method, url, data, headers) {
-               if (method !== 'PUT') {
-                       return [405, 'Unknown request'];
-               } else if (!this.requestHasToken) {
-                       return [401, 'A valid token is required'];
-               } else if (!this.userIsAuthenticated) {
-                       return [401, 'Invalid token'];
-               }
-
-               var preferenceKey = url.replace('/api/v1/preference/', '');
-               if (!_.isString(preferenceKey)) {
-                       return [400, 'Invalid category ID'];
-               } else if (!preferenceExists(preferenceKey)) {
-                       return [404, 'Preference does not exist'];
-               }
-
-               data = angular.fromJson(data);
-
-               if (!data.values) {
-                       return [400, 'Missing values field'];
-               }
-
-               var updatedPreference = updatePreference(preferenceKey, 
data.values);
-               if (!updatedPreference) {
-                       return [500, 'An internal database error has occurred'];
-               }
-
-               return [200, updatedPreference];
-       }
-
-       api.register('/preference/:key', 'put', processRequest);
-
-} );
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/rave/blob/c855ead0/rave-portal-ng/mock-api/modules/preferences/get.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/mock-api/modules/preferences/get.js 
b/rave-portal-ng/mock-api/modules/preferences/get.js
index 5aed581..4928b37 100644
--- a/rave-portal-ng/mock-api/modules/preferences/get.js
+++ b/rave-portal-ng/mock-api/modules/preferences/get.js
@@ -6,13 +6,13 @@ define(function(require) {
 
        function getPreferences() {
                var results = api.db.query('preferences');
-               results = _.map(results, function(item) {
-                       if (item.values.length === 1) {
-                               item.values = item.values[0];
-                       }
-                       return item;
+               var preferences = {};
+
+               _.each(results, function(item) {
+                       preferences[item.key] = item.value;
                });
-               return results;
+
+               return preferences;
        }
 
        function processRequest(method, url, data, headers) {
@@ -29,4 +29,4 @@ define(function(require) {
 
        api.register('/preferences', 'get', processRequest);
 
-} );
\ No newline at end of file
+} );

http://git-wip-us.apache.org/repos/asf/rave/blob/c855ead0/rave-portal-ng/mock-api/modules/preferences/put.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/mock-api/modules/preferences/put.js 
b/rave-portal-ng/mock-api/modules/preferences/put.js
new file mode 100644
index 0000000..845a894
--- /dev/null
+++ b/rave-portal-ng/mock-api/modules/preferences/put.js
@@ -0,0 +1,56 @@
+define(function(require) {
+  'use strict';
+
+  var api = require('../../core.js');
+  require('underscore/underscore');
+
+  function updatePreferences(data) {
+    var searchParams;
+
+    // Loop through each data point, updating the corresponding preference
+    // in the database.
+    _.each(data, function(value, key) {
+      searchParams = {
+        key: key
+      };
+      api.db.update('preferences', searchParams, function(row) {
+        row.value = value;
+        return row;
+      });
+    });
+    api.db.commit();
+
+    // This is exactly what we do in the GET method. We might
+    // want to DRY this up, but it's a mock API so no big deal.
+    var results = api.db.query('preferences');
+    var preferences = {};
+
+    _.each(results, function(item) {
+      preferences[item.key] = item.value;
+    });
+
+    return preferences;
+  }
+
+  function processRequest(method, url, data, headers) {
+    if (method !== 'PUT') {
+      return [405, 'Unknown request'];
+    } else if (!this.requestHasToken) {
+      return [401, 'A valid token is required'];
+    } else if (!this.userIsAuthenticated) {
+      return [401, 'Invalid token'];
+    }
+
+    data = angular.fromJson(data);
+
+    var updatedPreferences = updatePreferences(data);
+    if (!updatedPreferences) {
+      return [500, 'An internal database error has occurred'];
+    }
+
+    return [200, updatedPreferences];
+  }
+  
+  api.register('/preferences', 'put', processRequest);
+
+} );

http://git-wip-us.apache.org/repos/asf/rave/blob/c855ead0/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 11aa80d..0cc1ebe 100644
--- a/rave-portal-ng/src/subapps/admin/admin.js
+++ b/rave-portal-ng/src/subapps/admin/admin.js
@@ -3,6 +3,7 @@ define(function(require) {
 
   var admin = angular.module('admin', ['ngResource']);
 
+  // Categories
   var categoriesResource = require('./categories/resources/categories');
   admin.factory('categoriesResource', categoriesResource);
 
@@ -15,5 +16,12 @@ define(function(require) {
   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);
+
   return admin;
 });

http://git-wip-us.apache.org/repos/asf/rave/blob/c855ead0/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 c52305d..f79b644 100644
--- a/rave-portal-ng/src/subapps/admin/categories/resources/categories.js
+++ b/rave-portal-ng/src/subapps/admin/categories/resources/categories.js
@@ -20,8 +20,7 @@ define(function(require) {
         method: 'GET',
         isArray: true,
         headers: authHeader
-      },
-
+      }
     });
   }];
 });

http://git-wip-us.apache.org/repos/asf/rave/blob/c855ead0/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
new file mode 100644
index 0000000..62942c9
--- /dev/null
+++ b/rave-portal-ng/src/subapps/admin/preferences/controllers/preferences.js
@@ -0,0 +1,47 @@
+define(function(require) {
+  var _ = require('underscore');
+
+  // Our list of preferences. You must put any
+  // new preferences here for Angular to auto-update
+  // the ng-model.
+  var preferences = [
+    'titleSuffix',
+    'pageSize',
+    'defaultWidgetHeight',
+    'showStackTrace',
+    'initialWidgetStatus',
+    'externalMarketplaceUrl',
+    'javascriptDebugMode'
+  ];
+
+  return ['$scope', 'preferencesResource',
+  function($scope, preferencesResource) {
+
+    // Create our preferences object on the scope.
+    $scope.preferences = {};
+
+    // Try to get the current preferences to show the user
+    $scope.currentPreferences = preferencesResource.get();
+    $scope.currentPreferences.$promise
+      .then(function(res) {
+        var currentPrefs = _.pick(res, preferences);
+        _.each(currentPrefs, function(value, key) {
+          $scope.preferences[key] = value;
+        });
+      })
+      .catch(function() {
+      });
+
+    $scope.onSubmit = function() {
+      var updatedPreferences = preferencesResource.update(
+        $scope.preferences
+      );
+      updatedPreferences.$promise
+        .then(function(res) {
+
+        })
+        .catch(function(err) {
+        });
+    };
+  }];
+});

http://git-wip-us.apache.org/repos/asf/rave/blob/c855ead0/rave-portal-ng/src/subapps/admin/preferences/detail/detail.html
----------------------------------------------------------------------
diff --git a/rave-portal-ng/src/subapps/admin/preferences/detail/detail.html 
b/rave-portal-ng/src/subapps/admin/preferences/detail/detail.html
deleted file mode 100644
index a76d8d5..0000000
--- a/rave-portal-ng/src/subapps/admin/preferences/detail/detail.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<a ui-sref="portal.admin.preferences">« Back to overview</a>
-<h2>Preferences</h2>
-
-<section class="span10">
-  <form id="preferenceForm" class="form-horizontal" 
action="/portal/app/admin/preferencedetail/update" method="POST">
-    <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" 
value=" - Rave">
-      </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" 
value="10">
-      </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" value="250">
-      </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">
-          <option value="0">Disabled</option>
-          <option value="1" selected="selected">Enabled</option>
-        </select>
-      </div>
-    </div>
-    <div class="control-group">
-      <label for="showStackTrace.value" class="control-label">
-        Show stack trace on error pages *
-      </label>
-      <div class="controls">
-        <select id="showStackTrace" name="showStackTrace.value">
-          <option value="0" selected="selected">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">
-          <option value="PREVIEW" selected="selected">
-            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" value="">
-      </div>
-    </div>
-    <fieldset>
-        <button class="btn btn-primary" type="submit" value="Update 
preferences">Update preferences</button>
-    </fieldset>
-  </form>
-</section>

http://git-wip-us.apache.org/repos/asf/rave/blob/c855ead0/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
index 453e23e..9c7027d 100644
--- a/rave-portal-ng/src/subapps/admin/preferences/preferences.html
+++ b/rave-portal-ng/src/subapps/admin/preferences/preferences.html
@@ -1,57 +1,67 @@
 <article ui-view>
   <h2>Preferences</h2>
-  <table class="table table-striped table-bordered table-condensed">
-    <tbody>
-      <tr>
-        <th scope="row">
-          <a ui-sref="portal.admin.preferences.detail">JavaScript Debug 
Mode</a>
-        </th>
-        <td>
-          <ul>
-            <li>1</li>
-          </ul>
-        </td>
-      </tr>
-      <tr>
-        <th scope="row">
-          <a ui-sref="portal.admin.preferences.detail">Default widget 
height</a>
-        </th>
-        <td>
-          <ul>
-            <li>250</li>
-            </ul>
-        </td>
-      </tr>
-      <tr>
-        <th scope="row">
-          <a ui-sref="portal.admin.preferences.detail">Number of items per 
page (list)</a>
-        </th>
-        <td>
-          <ul>
-            <li>10</li>
-          </ul>
-        </td>
-      </tr>
-      <tr>
-        <th scope="row">
-          <a ui-sref="portal.admin.preferences.detail">Show stack trace on 
error pages</a>
-        </th>
-        <td>
-          <ul>
-            <li>0</li>
-          </ul>
-        </td>
-      </tr>
-      <tr>
-        <th scope="row">
-          <a ui-sref="portal.admin.preferences.detail">Page title suffix</a>
-        </th>
-        <td>
-          <ul>
-            <li> - Rave</li>
-          </ul>
-        </td>
-        </tr>
-    </tbody>
-  </table>
+  <form id="preferenceForm" class="form-horizontal" 
ng-controller="preferencesCtrl">
+    <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/c855ead0/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
new file mode 100644
index 0000000..c068227
--- /dev/null
+++ b/rave-portal-ng/src/subapps/admin/preferences/resources/preferences.js
@@ -0,0 +1,25 @@
+define(function(require) {
+
+  // The API endpoint for categories
+  var URL = '/api/v1/preferences';
+
+  // Return the categories resource
+  return ['$resource', 'authToken',
+  function($resource, authToken) {
+    var authHeader = {
+      Authorization: 'Basic ' + authToken.get()
+    };
+
+    return $resource(URL, {}, {
+      get: {
+        method: 'GET',
+        headers: authHeader
+      },
+
+      update: {
+        method: 'PUT',
+        headers: authHeader
+      },
+    });
+  }];
+});

http://git-wip-us.apache.org/repos/asf/rave/blob/c855ead0/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 27a8ee8..1fc9768 100644
--- a/rave-portal-ng/src/subapps/admin/preferences/routes.js
+++ b/rave-portal-ng/src/subapps/admin/preferences/routes.js
@@ -10,11 +10,6 @@ define(function(require) {
           url: '/preferences',
           templateUrl: '/subapps/admin/preferences/preferences.html',
           authenticate: true
-        })
-        .state('portal.admin.preferences.detail', {
-          url: '/preferences/detail',
-          templateUrl: '/subapps/admin/preferences/detail/detail.html',
-          authenticate: true
         });
     }
   ]);

Reply via email to