You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ol...@apache.org on 2012/01/04 09:50:11 UTC

svn commit: r1227080 - in /archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp: css/archiva.css index.html js/redback/roles.js js/redback/templates/roles-tmpl.html

Author: olamy
Date: Wed Jan  4 08:50:10 2012
New Revision: 1227080

URL: http://svn.apache.org/viewvc?rev=1227080&view=rev
Log:
assigned/unassigned user(s) to a role: double multiselect view

Modified:
    archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/css/archiva.css
    archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/index.html
    archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/redback/roles.js
    archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/redback/templates/roles-tmpl.html

Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/css/archiva.css
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/css/archiva.css?rev=1227080&r1=1227079&r2=1227080&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/css/archiva.css (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/css/archiva.css Wed Jan  4 08:50:10 2012
@@ -20,4 +20,25 @@
 /* medium-spinner */
 #medium-spinner {
  z-index: 20001;
+}
+
+
+
+.ar-multiselect .ar-multiselect-column {
+    float: left;
+    width: 17em;
+}
+
+.ar-multiselect .ar-multiselect-center {
+    float: left;
+    width: 3em;
+}
+
+.ar-multiselect-center ul {
+    list-style: none;
+    margin: 3px 0 2px 6px
+}
+
+.ar-multiselect-right {
+    margin-left: 2em
 }
\ No newline at end of file

Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/index.html
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/index.html?rev=1227080&r1=1227079&r2=1227080&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/index.html (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/index.html Wed Jan  4 08:50:10 2012
@@ -1,9 +1,11 @@
 <!DOCTYPE html>
 <html>
 <head>
+  <link rel="stylesheet" href="css/jquery-ui-1.8.16.custom.css"/>
   <link rel="stylesheet" href="css/bootstrap.min.1.4.0.css">
   <link rel="stylesheet" href="css/archiva.css">
 
+
   <script type="text/javascript" src="js/jquery-1.7.js"></script>
 
   <script type="text/javascript" src="js/lab.js"></script>
@@ -22,7 +24,34 @@
   <div class="content">
     <div id="user-messages"></div>
 
-    <div id="main-content"></div>
+    <div id="main-content">
+
+<div id="role-edit-users" class="clearfix ar-multiselect" style="float: left">
+<div class="ar-multiselect-column ar-multiselect-left">
+<select id="role-edit-available-users" class="" multiple="true">
+<option value="">admin</option>
+</select>
+</div>
+<div class="ar-multiselect-column ar-multiselect-center">
+<ul>
+<li>
+<button class="btn">&gt;</button>
+</li>
+<li>
+<button class="btn">&lt;</button>
+</li>
+</ul>
+</div>
+<div class="ar-multiselect-column ar-multiselect-right">
+<select id="role-edit-affected-users" class="" multiple="true">
+<option value="">admin</option>
+</select>
+</div>
+</div>
+</div>
+
+
+    </div>
   </div>
 </div>
 

Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/redback/roles.js
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/redback/roles.js?rev=1227080&r1=1227079&r2=1227080&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/redback/roles.js (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/redback/roles.js Wed Jan  4 08:50:10 2012
@@ -18,7 +18,7 @@
  */
 $(function() {
 
-  role = function(name,description,assignable,childRoleNames,parentRoleNames,users,parentsRolesUsers,permissions){
+  role = function(name,description,assignable,childRoleNames,parentRoleNames,users,parentsRolesUsers,permissions,otherUsers){
     this.name = ko.observable(name);
     this.description = ko.observable(description);
     this.assignable = ko.observable(assignable);
@@ -27,6 +27,8 @@ $(function() {
     this.users = ko.observableArray(users);
     this.parentsRolesUsers = ko.observableArray(parentsRolesUsers);//read only
     this.permissions = ko.observableArray(permissions);//read only
+    // when editing a role other users not assign to this role are populated
+    this.otherUsers = ko.observableArray(otherUsers);
 
     this.updateDescription=function(){
       var url = "restServices/redbackServices/roleManagementService/updateRoleDescription?";
@@ -54,6 +56,7 @@ $(function() {
    */
   RolesViewModel=function() {
     this.roles = ko.observableArray([]);
+
     var self = this;
     this.loadRoles = function() {
       $.ajax("restServices/redbackServices/roleManagementService/allRoles", {
@@ -96,22 +99,17 @@ $(function() {
          dataType: 'json',
          success: function(data) {
            var mappedRole = mapRole(data.role);
-           $("#main-content #roles-view-tabs-content #role-edit").attr("data-bind",'template: {name:"editRoleTab",data: role}');
+           $("#main-content #roles-view-tabs-content #role-edit").attr("data-bind",'template: {name:"editRoleTab",data: currentRole}');
            role.parentRoleNames=mappedRole.parentRoleNames;
            role.parentsRolesUsers=mappedRole.parentsRolesUsers;
            role.users=mappedRole.users;
-           var viewModel = new roleViewModel(role);
+           role.otherUsers=mappedRole.otherUsers;
+           var viewModel = new RoleViewModel(role);
            ko.applyBindings(viewModel,$("#main-content #roles-view-tabs-content #role-edit").get(0));
            activateRoleEditTab();
          }
         }
       );
-
-
-    }
-
-    this.saveRoleDescription=function(role){
-      $.log("saveRoleDescription:"+role.description);
     }
 
   }
@@ -130,16 +128,30 @@ $(function() {
     removeMediumSpinnerImg();
   }
 
-  saveRoleDescription=function(){
-    var roleName = $("#editRoleTable #role-edit-name").html();
-    var description = $("#editRoleTable #role-edit-description").val();
-    clearUserMessages();
-    new role(roleName,description).updateDescription();
-
-  }
+  RoleViewModel=function(role){
+    selectedOtherUsers=new ko.observableArray();
+    selectedUsers=new ko.observableArray();
+    currentRole=role;
+    var self=this;
+    addUser=function(){
+      var removed = currentRole.otherUsers.removeAll(selectedOtherUsers());
+      for (var i = 0; i < removed.length; i++) {
+        currentRole.users.push(removed[i]);
+      }
+      selectedOtherUsers([]);
+    }
 
-  roleViewModel=function(role){
-    this.role=role;
+    removeUser=function(){
+      var added = currentRole.users.removeAll(selectedUsers());
+      for (var i = 0; i < added.length; i++) {
+        currentRole.otherUsers.push(added[i]);
+      }
+      selectedUsers([]);
+    }
+    saveRoleDescription=function(){
+      $.log("saveRoleDescription:"+currentRole.description());
+      currentRole.updateDescription();
+    }
   }
 
   /**
@@ -164,7 +176,11 @@ $(function() {
       return mapPermission(item);
     }): new Array(mapPermission(data.permissions)) :null;
 
-    return new role(data.name, data.description?data.description:"",data.assignable,childRoleNames,parentRoleNames,users,parentsRolesUsers,permissions);
+    var otherUsers = data.otherUsers ? $.isArray(data.otherUsers)? $.map(data.otherUsers, function(item) {
+      return mapUser(item);
+    }):new Array(mapUser(data.otherUsers)):null;
+
+    return new role(data.name, data.description?data.description:"",data.assignable,childRoleNames,parentRoleNames,users,parentsRolesUsers,permissions,otherUsers);
   }
 
   activateRolesGridTab=function(){

Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/redback/templates/roles-tmpl.html
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/redback/templates/roles-tmpl.html?rev=1227080&r1=1227079&r2=1227080&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/redback/templates/roles-tmpl.html (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/redback/templates/roles-tmpl.html Wed Jan  4 08:50:10 2012
@@ -130,6 +130,21 @@
     ${$.i18n.prop('role.edit.no.user.defined')}
   {{/if}}
 
+  <div id="role-edit-users" class="clearfix ar-multiselect">
+    <div class="ar-multiselect-column ar-multiselect-left">
+    <select data-bind="options: otherUsers ,optionsText: 'username',selectedOptions:selectedOtherUsers" multiple="true" id="role-edit-available-users"></select>
+    </div>
+    <div class="ar-multiselect-column ar-multiselect-center">
+    <ul style="list-style: none">
+      <li><button class="btn" data-bind="click: addUser">&gt;</button></li>
+      <li><button class="btn" data-bind="click: removeUser">&lt;</button></li>
+    </ul>
+    </div>
+    <div class="ar-multiselect-column ar-multiselect-right">
+      <select data-bind="options: users ,optionsText: 'username',selectedOptions:selectedUsers" multiple="true" id="role-edit-affected-users"></select>
+    </div>
+  </div>
+
 </script>