You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by mf...@apache.org on 2014/08/29 14:16:56 UTC
[32/50] [abbrv] git commit: Adds pagination to Users admin section.
Adds pagination to Users admin section.
Project: http://git-wip-us.apache.org/repos/asf/rave/repo
Commit: http://git-wip-us.apache.org/repos/asf/rave/commit/b2278703
Tree: http://git-wip-us.apache.org/repos/asf/rave/tree/b2278703
Diff: http://git-wip-us.apache.org/repos/asf/rave/diff/b2278703
Branch: refs/heads/angular
Commit: b2278703ca8cca616ebc7c24793e42bf389be487
Parents: 9d95b06
Author: Jmeas <je...@gmail.com>
Authored: Fri Aug 15 16:30:37 2014 -0400
Committer: Jmeas <je...@gmail.com>
Committed: Fri Aug 15 16:34:00 2014 -0400
----------------------------------------------------------------------
rave-portal-ng/mock-api/core.js | 31 ++++-
.../mock-api/database/import-data/users.js | 128 +++++++++++++++++++
rave-portal-ng/mock-api/modules/users/get.js | 52 +++++++-
.../subapps/admin/users/controllers/users.js | 28 ++--
.../src/subapps/admin/users/routes.js | 8 +-
.../subapps/admin/users/templates/users.html | 26 ++--
6 files changed, 245 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/rave/blob/b2278703/rave-portal-ng/mock-api/core.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/mock-api/core.js b/rave-portal-ng/mock-api/core.js
index 59672fa..780c32d 100644
--- a/rave-portal-ng/mock-api/core.js
+++ b/rave-portal-ng/mock-api/core.js
@@ -54,6 +54,34 @@ define(function(require) {
$httpBackend.whenJSONP(matchAllRegex).passThrough();
}
+ function parseQueryString(str) {
+ str = str.split('?')[1];
+ if(typeof str !== 'string' || str.length === 0) {
+ return {};
+ }
+ var s = str.split('&');
+ var sLength = s.length;
+ var bit, query = {}, first, second;
+ for (var i = 0; i < sLength; i++) {
+ bit = s[i].split('=');
+ first = decodeURIComponent(bit[0]);
+ if(first.length === 0) {
+ continue;
+ }
+ second = decodeURIComponent(bit[1]);
+ if(typeof query[first] === 'undefined') {
+ query[first] = second;
+ }
+ else if(query[first] instanceof Array) {
+ query[first].push(second);
+ }
+ else {
+ query[first] = [query[first], second];
+ }
+ }
+ return query;
+ }
+
function buildApiScope(method, url, data, headers) {
function requestHasToken() {
@@ -88,7 +116,8 @@ define(function(require) {
return {
requestHasToken: requestHasToken(),
userIsAuthenticated: ((getCurrentUserFromToken() !== false) ? true : false),
- currentUser: getCurrentUserFromToken()
+ currentUser: getCurrentUserFromToken(),
+ parseQueryString: parseQueryString
};
}
http://git-wip-us.apache.org/repos/asf/rave/blob/b2278703/rave-portal-ng/mock-api/database/import-data/users.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/mock-api/database/import-data/users.js b/rave-portal-ng/mock-api/database/import-data/users.js
index 8a5bbbb..86b6620 100644
--- a/rave-portal-ng/mock-api/database/import-data/users.js
+++ b/rave-portal-ng/mock-api/database/import-data/users.js
@@ -98,5 +98,133 @@ define(function(require) {
'expired': false,
'authorities': ['ROLE_USER']
},
+ {
+ 'username': 'john.doe',
+ 'password': 'john.doe',
+ 'email': 'john.doe@gmail.com',
+ 'openIdUrl': '',
+ 'firstName': 'John',
+ 'lastName': 'Doe',
+ 'nameSeenByOthers': 'John',
+ 'relationshipStatus': 'Single',
+ 'description': 'Rave test user.',
+ 'sessionToken': '',
+ 'locked': false,
+ 'enabled': true,
+ 'expired': false,
+ 'authorities': ['ROLE_USER']
+ },
+ {
+ 'username': 'four.col',
+ 'password': 'four.col',
+ 'email': 'four.col@gmail.com',
+ 'openIdUrl': '',
+ 'firstName': 'Four',
+ 'lastName': 'Col',
+ 'nameSeenByOthers': 'Four',
+ 'relationshipStatus': 'Single',
+ 'description': 'Rave test user.',
+ 'sessionToken': '',
+ 'locked': false,
+ 'enabled': true,
+ 'expired': false,
+ 'authorities': ['ROLE_USER']
+ },
+ {
+ 'username': 'fourwn.col',
+ 'password': 'fourwn.col',
+ 'email': 'fourwn.col@gmail.com',
+ 'openIdUrl': '',
+ 'firstName': 'Fourwn',
+ 'lastName': 'Col',
+ 'nameSeenByOthers': 'Fourwn',
+ 'relationshipStatus': 'Single',
+ 'description': 'Rave test user.',
+ 'sessionToken': '',
+ 'locked': false,
+ 'enabled': true,
+ 'expired': false,
+ 'authorities': ['ROLE_USER']
+ },
+ {
+ 'username': 'threewn.col',
+ 'password': 'threewn.col',
+ 'email': 'threewn.col@gmail.com',
+ 'openIdUrl': '',
+ 'firstName': 'Threewn',
+ 'lastName': 'Col',
+ 'nameSeenByOthers': 'Threewn',
+ 'relationshipStatus': 'Single',
+ 'description': 'Rave test user.',
+ 'sessionToken': '',
+ 'locked': false,
+ 'enabled': true,
+ 'expired': false,
+ 'authorities': ['ROLE_USER']
+ },
+ {
+ 'username': 'three.col',
+ 'password': 'three.col',
+ 'email': 'three.col@gmail.com',
+ 'openIdUrl': '',
+ 'firstName': 'Three',
+ 'lastName': 'Col',
+ 'nameSeenByOthers': 'Three',
+ 'relationshipStatus': 'Single',
+ 'description': 'Rave test user.',
+ 'sessionToken': '',
+ 'locked': false,
+ 'enabled': true,
+ 'expired': false,
+ 'authorities': ['ROLE_USER']
+ },
+ {
+ 'username': 'twown.col',
+ 'password': 'twown.col',
+ 'email': 'twown.col@gmail.com',
+ 'openIdUrl': '',
+ 'firstName': 'Twown',
+ 'lastName': 'Col',
+ 'nameSeenByOthers': 'Twown',
+ 'relationshipStatus': 'Single',
+ 'description': 'Rave test user.',
+ 'sessionToken': '',
+ 'locked': false,
+ 'enabled': true,
+ 'expired': false,
+ 'authorities': ['ROLE_USER']
+ },
+ {
+ 'username': 'george.doe',
+ 'password': 'george.doe',
+ 'email': 'george.doe@gmail.com',
+ 'openIdUrl': '',
+ 'firstName': 'George',
+ 'lastName': 'Doe',
+ 'nameSeenByOthers': 'George',
+ 'relationshipStatus': 'Single',
+ 'description': 'Rave test user.',
+ 'sessionToken': '',
+ 'locked': false,
+ 'enabled': true,
+ 'expired': false,
+ 'authorities': ['ROLE_USER']
+ },
+ {
+ 'username': 'rave2011.myopenid.com',
+ 'password': '',
+ 'email': 'rave2011@myopenid.com',
+ 'openIdUrl': 'http://rave2011.myopenid.com/',
+ 'firstName': 'Rave',
+ 'lastName': '2011',
+ 'nameSeenByOthers': 'George',
+ 'relationshipStatus': 'Single',
+ 'description': 'Rave test user.',
+ 'sessionToken': '',
+ 'locked': false,
+ 'enabled': true,
+ 'expired': false,
+ 'authorities': ['ROLE_USER']
+ },
];
});
http://git-wip-us.apache.org/repos/asf/rave/blob/b2278703/rave-portal-ng/mock-api/modules/users/get.js
----------------------------------------------------------------------
diff --git a/rave-portal-ng/mock-api/modules/users/get.js b/rave-portal-ng/mock-api/modules/users/get.js
index 4e52226..4bc65bb 100644
--- a/rave-portal-ng/mock-api/modules/users/get.js
+++ b/rave-portal-ng/mock-api/modules/users/get.js
@@ -19,7 +19,15 @@ define(function(require) {
'email'
];
- function getUsers() {
+ function getPageSize() {
+ var prefs = api.db.query('preferences');
+ // return prefs;
+ var pageSize = _.findWhere(prefs, {key: 'pageSize'});
+ return pageSize.value;
+ }
+
+ function getUsers(params) {
+
var rawUsers = api.db.query('users');
var filteredUsers = [];
@@ -27,7 +35,36 @@ define(function(require) {
filteredUsers.push(_.pick(rawUser, userKeys));
});
- return filteredUsers;
+ var page = params.page || 1;
+ var pageSize = getPageSize();
+
+ // The first index to start from
+ var startIndex = (page - 1) * pageSize;
+
+ // The naive end index. We may have overshot this.
+ var endIndex = page * pageSize;
+
+ // Truncate our end index if it's too long. Slice only goes UP TO
+ // this index, which is why we don't use (length - 1)
+ if (endIndex > filteredUsers.length) {
+ endIndex = filteredUsers.length;
+ }
+
+ var results = filteredUsers.slice(startIndex, endIndex);
+
+ var returnObj = {};
+
+ returnObj.data = results;
+ returnObj.metadata = {
+ pageSize: pageSize,
+ page: page,
+ start: startIndex+1,
+ end: endIndex,
+ pageCount: Math.ceil(filteredUsers.length / pageSize),
+ totalUsers: filteredUsers.length
+ };
+
+ return returnObj;
}
function processRequest(method, url, data, headers) {
@@ -39,7 +76,16 @@ define(function(require) {
return [401, 'Invalid token'];
}
- return [200, getUsers()];
+ var params = this.parseQueryString(url);
+
+ var usersData = getUsers(params);
+
+ var object = {
+ data: usersData.data,
+ metadata: usersData.metadata
+ };
+
+ return [200, object];
}
api.register('/users', 'get', processRequest);
http://git-wip-us.apache.org/repos/asf/rave/blob/b2278703/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 7e7b0aa..2125847 100644
--- a/rave-portal-ng/src/subapps/admin/users/controllers/users.js
+++ b/rave-portal-ng/src/subapps/admin/users/controllers/users.js
@@ -5,31 +5,39 @@
*/
define(function(require) {
- return ['$scope', '$stateParams', 'pagination', 'usersList',
- function($scope, $stateParams, pagination, usersList) {
+ return ['$scope', '$stateParams', 'pagination', 'usersList', '$rootScope',
+ function($scope, $stateParams, pagination, usersList, $rootScope) {
$scope.currentPage = +$stateParams.page || 0;
- // How many items to show per page
- $scope.itemsPerPage = 10;
+ usersList.$promise.then(function() {
+ $scope.users = usersList.data;
- $scope.users = usersList;
+ var usersMeta = usersList.metadata;
- // Our total number of users.
- $scope.totalUsers = 1000;
+ // Coerce each piece of metadata to a number.
+ _.each(usersMeta, function(val, key) {
+ usersMeta[key] = +val;
+ });
- // The generated pageCount.
- $scope.pageCount = Math.ceil($scope.totalUsers / $scope.itemsPerPage);
+ $scope.usersMeta = usersMeta;
+ });
// Our paginationPages
$scope.paginationPages = pagination.paginationPages;
$scope.prevPageDisabled = function() {
+ if (!$scope.currentPage) {
+ return 'disabled';
+ }
return $scope.currentPage === 1 ? 'disabled' : '';
};
$scope.nextPageDisabled = function() {
- return $scope.currentPage === $scope.pageCount ? 'disabled' : '';
+ if (!$scope.usersMeta) {
+ return 'disabled';
+ }
+ return $scope.currentPage === $scope.usersMeta.pageCount ? 'disabled' : '';
};
}];
});
http://git-wip-us.apache.org/repos/asf/rave/blob/b2278703/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 592144d..ba04fac 100644
--- a/rave-portal-ng/src/subapps/admin/users/routes.js
+++ b/rave-portal-ng/src/subapps/admin/users/routes.js
@@ -21,9 +21,11 @@ define(function(require) {
authenticate: true,
controller: usersCtrl,
resolve: {
- usersList: ['usersResource',
- function(usersResource) {
- return usersResource.query();
+ usersList: ['usersResource', '$stateParams',
+ function(usersResource, $stateParams) {
+ return usersResource.get({
+ page: $stateParams.page
+ });
}]
}
})
http://git-wip-us.apache.org/repos/asf/rave/blob/b2278703/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
index 9628338..cc88cc3 100644
--- a/rave-portal-ng/src/subapps/admin/users/templates/users.html
+++ b/rave-portal-ng/src/subapps/admin/users/templates/users.html
@@ -1,18 +1,20 @@
<article ui-view>
<h2>
- Showing {{ firstItem() }} - {{ lastItem() }} of {{ users.length }} results
+ Showing {{ usersMeta.start }} - {{ usersMeta.end }} of {{ usersMeta.totalUsers }} results
</h2>
<div class="searchHeading paginationHeading">
<div class="pagination">
<ul>
- <li ng-class="prevPageDisabled()">
- <a ui-sref="portal.admin.users({page:currentPage-1})"><</a>
+ <li ng-switch on="prevPageDisabled()" ng-class="prevPageDisabled()">
+ <a ng-switch-when="disabled"><</a>
+ <a ng-switch-default ui-sref="portal.admin.users({page:usersMeta.page-1})"><</a>
</li>
- <li ng-repeat="n in paginationPages(currentPage, pageCount)" ng-class="{ active: n == currentPage }">
+ <li ng-repeat="n in paginationPages(usersMeta.page, usersMeta.pageCount)" ng-class="{ active: n == usersMeta.page }">
<a ui-sref="portal.admin.users({page:n})">{{ n }}</a>
</li>
- <li ng-class="nextPageDisabled()">
- <a ui-sref="portal.admin.users({page:currentPage+1})">></a>
+ <li ng-switch on="nextPageDisabled()" ng-class="nextPageDisabled()">
+ <a ng-switch-when="disabled">></a>
+ <a ng-switch-default ui-sref="portal.admin.users({page:usersMeta.page+1})">></a>
</li>
</ul>
</div>
@@ -47,14 +49,16 @@
</table>
<div class="pagination">
<ul>
- <li ng-class="prevPageDisabled()">
- <a ui-sref="portal.admin.users({page:currentPage-1})"><</a>
+ <li ng-switch on="prevPageDisabled()" ng-class="prevPageDisabled()">
+ <a ng-switch-when="disabled"><</a>
+ <a ng-switch-default ui-sref="portal.admin.users({page:usersMeta.page-1})"><</a>
</li>
- <li ng-repeat="n in paginationPages(currentPage, pageCount)" ng-class="{ active: n == currentPage }">
+ <li ng-repeat="n in paginationPages(usersMeta.page, usersMeta.pageCount)" ng-class="{ active: n == usersMeta.page }">
<a ui-sref="portal.admin.users({page:n})">{{ n }}</a>
</li>
- <li ng-class="nextPageDisabled()">
- <a ui-sref="portal.admin.users({page:currentPage+1})">></a>
+ <li ng-switch on="nextPageDisabled()" ng-class="nextPageDisabled()">
+ <a ng-switch-when="disabled">></a>
+ <a ng-switch-default ui-sref="portal.admin.users({page:usersMeta.page+1})">></a>
</li>
</ul>
</article>