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

Gui 336 users Wrapped Chosen widget to work as specified in the wire-frame #177

Merged
merged 3 commits into from
Feb 7, 2014
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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