浏览代码

[useradmin] Bulk delete groups frontend

Refactored templates to emulate the delete users files to pass names to
backend instead of individual group names.
Paul McCaughtry 11 年之前
父节点
当前提交
e2780ba9cd

+ 13 - 9
apps/useradmin/src/useradmin/templates/delete_group.mako

@@ -16,13 +16,17 @@
 <%!
 from django.utils.translation import ugettext as _
 %>
-<form id="deleteGroupForm" action="${path}" method="POST">
-<div class="modal-header">
-    <a href="#" class="close" data-dismiss="modal">&times;</a>
-    <h3 id="deleteGroupMessage">${_("Are you sure you want to delete")} ${groupname}${_("?")}</h3>
-</div>
-<div class="modal-footer">
-    <a href="javascript:void(0);" class="btn" data-dismiss="modal">${_('No')}</a>
-    <input type="submit" class="btn btn-danger" value="${_('Yes')}"/>
-</div>
+<form id="deleteGroupForm" action="${ url('useradmin.views.delete_group') }" method="POST">
+  <div class="modal-header">
+      <a href="#" class="close" data-dismiss="modal">&times;</a>
+      <h3 id="deleteGroupMessage">${_("Are you sure you want to delete the selected group(s)?")}</h3>
+  </div>
+  <div class="modal-footer">
+      <a href="javascript:void(0);" class="btn" data-dismiss="modal">${_('No')}</a>
+      <input type="submit" class="btn btn-danger" value="${_('Yes')}"/>
+  </div>
+  <div class="hide">
+    <select name="group_ids" data-bind="options: availableUsers, selectedOptions: chosenUsers"
+            multiple="true"></select>
+  </div>
 </form>

+ 20 - 2
apps/useradmin/src/useradmin/templates/list_groups.mako

@@ -83,7 +83,7 @@ ${layout.menubar(section='groups')}
           <td>
             %if user.is_superuser:
               <strong><a title="${_('Edit %(groupname)s') % dict(groupname=group.name)}"
-                         href="${ url('useradmin.views.edit_group', name=urllib.quote(group.name)) }"
+                         href="${ url('useradmin.views.edit_group', name=urllib.quote(group.name))}"
                          data-row-selector="true">${group.name}</a></strong>
             %else:
               <strong>${group.name}</strong>
@@ -109,8 +109,16 @@ ${layout.menubar(section='groups')}
 
 <div id="deleteGroup" class="modal hide fade groupModal"></div>
 
+<script src="/static/ext/js/knockout-min.js" type="text/javascript" charset="utf-8"></script>
 <script type="text/javascript" charset="utf-8">
   $(document).ready(function () {
+    var viewModel = {
+      availableUsers: ko.observableArray(${ groups_json | n }),
+      chosenUsers: ko.observableArray([])
+    };
+
+    ko.applyBindings(viewModel);
+
     $(".datatables").dataTable({
       "bPaginate": false,
       "bLengthChange": false,
@@ -172,7 +180,7 @@ ${layout.menubar(section='groups')}
     });
 
     function toggleActions() {
-      if ($(".groupCheck[checked='checked']").length == 1) {
+      if ($(".groupCheck[checked='checked']").length > 0) {
         $("#deleteGroupBtn").removeAttr("disabled").data("confirmation-url", $(".groupCheck[checked='checked']").data("confirmation-url"));
       }
       else {
@@ -180,6 +188,16 @@ ${layout.menubar(section='groups')}
       }
     }
 
+    $("#deleteGroupBtn").click(function () {
+      viewModel.chosenUsers.removeAll();
+
+      $(".hueCheckbox[checked='checked']").each(function (index) {
+        viewModel.chosenUsers.push($(this).data("id"));
+      });
+
+      $("#deleteGroup").modal("show");
+    });
+
     $("a[data-row-selector='true']").jHueRowSelector();
   });
 </script>