diff --git a/src/js/client.js b/src/js/client.js index b786524f9..80a000fd9 100644 --- a/src/js/client.js +++ b/src/js/client.js @@ -862,11 +862,17 @@ angular.module('Application').service('Client', ['$http', '$interval', 'md5', 'N }); }; - Client.prototype.getUsers = function (callback) { + Client.prototype.getUsers = function (page, perPage, callback) { + if (typeof page === 'function') { + callback = page; + page = 1; + perPage = 1000; + } + var config = { params: { - page: 1, - per_page: 1000 + page: page, + per_page: perPage } }; diff --git a/src/views/users.html b/src/views/users.html index d777b9cae..f427d1f27 100644 --- a/src/views/users.html +++ b/src/views/users.html @@ -295,52 +295,67 @@ -
-
-
-
-

-
-
-
-
- - - - - - - - - - - - - - - - - - - -
UserActions
- - - {{ user.displayName }}   {{ user.username }} - - {{ user.fallbackEmail }} - - - - -
-
-
+
+
+
+ +
+ +
+
+ +
+
+
+
+
+

+
+
+
+
+ + + + + + + + + + + + + + + + + + + +
UserActions
+ + + {{ user.displayName }}   {{ user.username }} + + {{ user.fallbackEmail }} + + + + +
+
+
+
+

diff --git a/src/views/users.js b/src/views/users.js index a38079315..81a7f8f1f 100644 --- a/src/views/users.js +++ b/src/views/users.js @@ -4,6 +4,7 @@ /* global Clipboard:false */ /* global asyncForEach:false */ /* global asyncSeries:false */ +/* global $:false */ angular.module('Application').controller('UsersController', ['$scope', '$location', '$timeout', 'Client', function ($scope, $location, $timeout, Client) { Client.onReady(function () { if (!Client.getUserInfo().admin) $location.path('/'); }); @@ -16,6 +17,15 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio $scope.config = Client.getConfig(); $scope.userInfo = Client.getUserInfo(); + $scope.currentPage = 1; + $scope.pageItemCount = [ + { name: 'Show 20 per page', value: 20 }, + { name: 'Show 50 per page', value: 50 }, + { name: 'Show 100 per page', value: 100 } + ]; + $scope.pageItems = $scope.pageItemCount[0]; + $scope.userRefreshBusy = false; + $scope.groupMembers = function (group) { return group.userIds.filter(function (uid) { return !!$scope.usersById[uid]; }).map(function (uid) { return $scope.usersById[uid].username || $scope.usersById[uid].email; }).join(' '); }; @@ -442,7 +452,7 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio function getUsers(callback) { var users = [ ]; - Client.getUsers(function (error, results) { + Client.getUsers($scope.currentPage, $scope.pageItems.value, function (error, results) { if (error) return console.error(error); asyncForEach(results, function (result, iteratorDone) { @@ -479,6 +489,23 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio }); } + function refreshUsers() { + $scope.userRefreshBusy = true; + + getUsers(function (error, result) { + if (error) return console.error('Unable to get user listing.', error); + + angular.copy(result, $scope.users); + $scope.usersById = { }; + for (var i = 0; i < result.length; i++) { + $scope.usersById[result[i].id] = result[i]; + } + + $scope.ready = true; + $scope.userRefreshBusy = false; + }); + } + function refresh() { getGroups(function (error, result) { if (error) return console.error('Unable to get group listing.', error); @@ -489,20 +516,26 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio $scope.groupsById[result[i].id] = result[i]; } - getUsers(function (error, result) { - if (error) return console.error('Unable to get user listing.', error); - - angular.copy(result, $scope.users); - $scope.usersById = { }; - for (var i = 0; i < result.length; i++) { - $scope.usersById[result[i].id] = result[i]; - } - - $scope.ready = true; - }); + refreshUsers(); }); } + $scope.showNextPage = function () { + $scope.currentPage++; + refreshUsers(); + }; + + $scope.showPrevPage = function () { + if ($scope.currentPage > 1) $scope.currentPage--; + else $scope.currentPage = 1; + refreshUsers(); + }; + + $scope.updateFilter = function (fresh) { + if (fresh) $scope.currentPage = 1; + refreshUsers(); + }; + Client.onReady(refresh); // setup all the dialog focus handling