Skip to content
This repository was archived by the owner on Aug 30, 2024. It is now read-only.

Commit

Permalink
Merge pull request #177 from eucalyptus/GUI-336-users
Browse files Browse the repository at this point in the history
Gui 336 users Wrapped Chosen widget to work as specified in the wire-frame
kamalgill committed Feb 7, 2014
2 parents 4cea4c4 + 08f364a commit 9ac3e60
Showing 3 changed files with 84 additions and 19 deletions.
32 changes: 29 additions & 3 deletions koala/static/js/pages/group.js
Original file line number Diff line number Diff line change
@@ -11,10 +11,36 @@ angular.module('GroupPage', [])
$scope.initController = function (group_users, all_users) {
$scope.groupUsers = group_users;
$scope.allUsers = all_users;
$scope.setWatch();
$timeout(function(){$("#users-select").chosen(); }, 100);
$timeout(function(){ $scope.activateChosen(); }, 100);
};
$scope.setWatch = function () {
$scope.activateChosen = function () {
$("#users-select").chosen();
$("#users_select_chosen .chosen-choices").bind("DOMSubtreeModified", function(e) {
$timeout(function(){ $scope.adjustGroupUsers(); }, 100);
});
};
$scope.adjustGroupUsers = function () {
var newUsers = [];
$("#users_select_chosen .chosen-choices .search-choice").each(function (index){
var thisUser = $( this ).text();
newUsers.push(thisUser);
});
var userAdded = false;
if( $scope.groupUsers.length < newUsers.length ){
userAdded = true;
}
$scope.groupUsers = newUsers;
if( userAdded == true ){
$scope.$apply();
}
};
$scope.removeUser = function (user) {
$("#users_select_chosen .chosen-choices .search-choice").each(function (index){
var thisUser = $( this ).text();
if( thisUser == user ){
$( this ).children('a').click();
}
});
};
$scope.isSelected = function (user) {
for (i in $scope.groupUsers){
12 changes: 11 additions & 1 deletion koala/templates/groups/group_view.pt
Original file line number Diff line number Diff line change
@@ -2,7 +2,10 @@

<head metal:fill-slot="head_css">
<link rel="stylesheet" type="text/css" href="${request.static_url('koala:static/css/thirdparty/chosen.min.css')}" />
</head
<style>
.chosen-container-multi .chosen-choices li.search-choice { display: none; }
</style>
</head>

<div metal:fill-slot="main_content">
<div class="row" id="contentwrap"
@@ -98,6 +101,13 @@
<option ng-repeat="user in allUsers" ng-selected="isSelected(user)">{{user}}</option>
</select>
</div>
</div>
<div class="row controls-wrapper readonly">
<div id="users_select_field">
<span class="label radius secondary" ng-repeat="user in groupUsers">
<a ng-click="removeUser(user)"><i class="fi-x"></i></a>{{ user }}
</span>
</div>
</div>
<div class="row controls-wrapper readonly">
<div class="small-4 columns">&nbsp;</div>
59 changes: 44 additions & 15 deletions koala/views/groups.py
Original file line number Diff line number Diff line change
@@ -150,25 +150,31 @@ def group_create(self):
def group_update(self):
if self.group_update_form.validate():
new_users = self.request.params.getall('input-users-select')
if new_users is not None:
self.group_update_users( self.group.group_name, new_users)
new_group_name = self.request.params.get('group_name') if self.group.group_name != self.request.params.get('group_name') else None
new_path = self.request.params.get('path') if self.group.path != self.request.params.get('path') else None
this_group_name = new_group_name if new_group_name is not None else self.group.group_name
try:
self.conn.update_group(self.group.group_name, new_group_name=new_group_name, new_path=new_path)
msg_template = _(u'Successfully modified group {group}')
msg = msg_template.format(group=this_group_name)
queue = Notification.SUCCESS
except EC2ResponseError as err:
msg = err.message
queue = Notification.ERROR
if new_users is not None:
self.group_update_users( self.group.group_name, new_users)
if new_group_name is not None or new_path is not None:
self.group_update_name_and_path(new_group_name, new_path)
location = self.request.route_url('group_view', name=this_group_name)
self.request.session.flash(msg, queue=queue)
return HTTPFound(location=location)

return self.render_dict

def group_update_name_and_path(self, new_group_name, new_path):
this_group_name = new_group_name if new_group_name is not None else self.group.group_name
try:
self.conn.update_group(self.group.group_name, new_group_name=new_group_name, new_path=new_path)
msg_template = _(u'Successfully modified group {group}')
msg = msg_template.format(group=this_group_name)
queue = Notification.SUCCESS
except EC2ResponseError as err:
msg = err.message
queue = Notification.ERROR
self.request.session.flash(msg, queue=queue)
return

def group_update_users(self, group_name, new_users):
new_users = [u.encode('ascii', 'ignore') for u in new_users]

@@ -178,19 +184,42 @@ def group_update_users(self, group_name, new_users):
if user == new_user:
is_new = False
if is_new:
self.conn.add_user_to_group(group_name, new_user)
self.group_add_user(group_name, new_user)

for user in self.group_users:
is_deleted = True
for new_user in new_users:
if user == new_user:
is_deleted = False
if is_deleted:
self.conn.remove_user_from_group(group_name, user)
self.group_remove_user(group_name, user)

return



def group_add_user(self, group_name, user):
try:
self.conn.add_user_to_group(group_name, user)
msg_template = _(u'Successfully added user {user}')
msg = msg_template.format(user=user)
queue = Notification.SUCCESS
except EC2ResponseError as err:
msg = err.message
queue = Notification.ERROR
self.request.session.flash(msg, queue=queue)

return

def group_remove_user(self, group_name, user):
try:
self.conn.remove_user_from_group(group_name, user)
msg_template = _(u'Successfully removed user {user}')
msg = msg_template.format(user=user)
queue = Notification.SUCCESS
except EC2ResponseError as err:
msg = err.message
queue = Notification.ERROR
self.request.session.flash(msg, queue=queue)

return


0 comments on commit 9ac3e60

Please sign in to comment.