]> source.dussan.org Git - archiva.git/commitdiff
[MRM-1734] add some filtering for searching in users table
authorOlivier Lamy <olamy@apache.org>
Wed, 2 Jan 2013 09:00:36 +0000 (09:00 +0000)
committerOlivier Lamy <olamy@apache.org>
Wed, 2 Jan 2013 09:00:36 +0000 (09:00 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1427713 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/redback/users.js
archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/templates/redback/user-edit.html

index 4409b04357cb34bd37dc88a790866e39d7425a38..13b2f72ad248295bf00b973793db31b27aa74a5b 100644 (file)
@@ -23,8 +23,9 @@ function(jquery,utils,i18n,jqueryValidate,ko,koSimpleGrid) {
    * view model used for users grid
    */
   UsersViewModel=function() {
-    this.users = ko.observableArray([]);
     var self = this;
+    this.users = ko.observableArray([]);
+    this.originalUsers=ko.observableArray([]);
 
     this.gridViewModel = new ko.simpleGrid.viewModel({
       data: this.users,
@@ -32,17 +33,25 @@ function(jquery,utils,i18n,jqueryValidate,ko,koSimpleGrid) {
       columns: [
         {
           headerText: "User Name",
-          rowText: "username"},
+          rowText: "username",
+          filter: true
+        },
         {
           headerText: "Full Name",
-          rowText: "fullName"},
+          rowText: "fullName",
+          filter: true
+        },
         {
           headerText: "Email",
-          rowText: "email"}
+          rowText: "email",
+          filter: true
+        }
       ],
       pageSize: 10
     });
-
+    clearFilters=function(){
+      self.users(self.originalUsers());
+    };
     this.addUser=function() {
       clearUserMessages();
       var mainContent = $("#main-content");
@@ -227,6 +236,34 @@ function(jquery,utils,i18n,jqueryValidate,ko,koSimpleGrid) {
 
   }
 
+  applyAutocompleteOnHeader=function(property,usersViewModel){
+    $("#main-content").find("#users-grid-filter-auto-"+property ).autocomplete({
+      minLength: 0,
+      source: function(request, response){
+        var founds=[];
+        $.log("source:"+request.term+",users:"+usersViewModel.users().length)
+        $(usersViewModel.users()).each(function(idx,user){
+          if(user[property] && user[property]() && user[property]().indexOf(request.term)>=0){
+            founds.push(user[property]());
+          }
+        });
+        response(unifyArray(founds,true));
+      },
+      select: function( event, ui ) {
+        $.log("property:"+property+','+ui.item.value);
+        var users=[];
+        $(usersViewModel.users()).each(function(idx,user){
+          if(user[property] && user[property]() && user[property]().indexOf(ui.item.value)>=0){
+            users.push(user);
+          }
+        });
+        $.log("property:"+property+','+ui.item.value+",size:"+users.length);
+        usersViewModel.users(users);
+        return false;
+      }
+    });
+  }
+
   /**
    * called from the menu to display tabs with users grid
     */
@@ -245,12 +282,10 @@ function(jquery,utils,i18n,jqueryValidate,ko,koSimpleGrid) {
           });
           var usersViewModel = new UsersViewModel();
           usersViewModel.users(mappedUsers);
+          usersViewModel.originalUsers(mappedUsers);
           ko.applyBindings(usersViewModel,jQuery("#main-content").get(0));
           mainContent.find("#users-view-tabs a:first").tab('show');
           mainContent.find("#users-view-tabs a[data-toggle='tab']").on('show', function (e) {
-            //$.log( $(e.target).attr("href") ); // activated tab
-            //e.relatedTarget // previous tab
-            $.log("tabs shown");
             if ($(e.target).attr("href")=="#createUserForm") {
               usersViewModel.addUser();
             }
@@ -260,6 +295,9 @@ function(jquery,utils,i18n,jqueryValidate,ko,koSimpleGrid) {
 
           })
           mainContent.find("#users-view-tabs-content #users-view").addClass("active");
+          applyAutocompleteOnHeader("username",usersViewModel);
+          applyAutocompleteOnHeader("fullName",usersViewModel);
+          applyAutocompleteOnHeader("email",usersViewModel);
         }
       }
     );
index 3db9d88ce92a40ff30b6efa7816a77398168e167..6ec095661b7bb0d711a8e33ba4699786e7c4740a 100644 (file)
 </script>
 
 <script id='ko_usersGrid_grid' type='text/html'>
+
   <thead>
-  <tr>
-    {{each(i, columnDefinition) columns}}
-    <th>${ columnDefinition.headerText }</th>
-    {{/each}}
-    <th>${$.i18n.prop('edit')}</th>
-    <th>${$.i18n.prop('delete')}</th>
-    <th>${$.i18n.prop('user.list.locked')}</th>
-    <th>${$.i18n.prop('user.change.password.required')}</th>
-  </tr>
+    <tr>
+      {{each(i, columnDefinition) columns}}
+      <th>${ columnDefinition.headerText }</th>
+      {{/each}}
+      <th>${$.i18n.prop('edit')}</th>
+      <th>${$.i18n.prop('delete')}</th>
+      <th>${$.i18n.prop('user.list.locked')}</th>
+      <th>${$.i18n.prop('user.change.password.required')}</th>
+    </tr>
+    <tr>
+      {{each(i, columnDefinition) columns}}
+      <th>
+        {{if columnDefinition.filter }}
+        <input type="text" class="form-search input-medium" id="users-grid-filter-auto-${columnDefinition.rowText}"
+               placeholder="${$.i18n.prop('search.artifact.result.grid.filter')}"/>
+        {{/if}}
+      </th>
+      {{/each}}
+      <th></th>
+      <th></th>
+      <th>locked ?</th>
+      <th>chg pwd</th>
+    </tr>
   </thead>
   <tbody>
   {{each(i, row) itemsOnCurrentPage()}}
       <button data-bind='click: sortByName' class="btn">
         ${$.i18n.prop('users.sort.byname')}
       </button>
+      <a href="#" class="btn btn-warning" data-bind="click: clearFilters" id="remove-filter-id">${$.i18n.prop('search.artifact.result.filter')}</a>
       <table class="table table-striped table-bordered" id="usersTable"
              data-bind="simpleGrid: gridViewModel,simpleGridTemplate:'ko_usersGrid_grid',pageLinksId:'usersPagination'">
       </table>