RANGER-974 : Allow users to move policy items in create / edit Policy screen

Signed-off-by: Gautam Borad <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/f4a7037d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/f4a7037d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/f4a7037d

Branch: refs/heads/master
Commit: f4a7037dba4e9714535990dc619db5c0b445d90f
Parents: d4fd012
Author: Mehul Parikh <[email protected]>
Authored: Fri May 6 15:57:08 2016 +0530
Committer: Gautam Borad <[email protected]>
Committed: Tue May 10 17:23:38 2016 +0530

----------------------------------------------------------------------
 .../scripts/views/policies/PermissionList.js    | 68 ++++++--------------
 .../views/policymanager/ServiceLayout.js        |  1 +
 .../webapp/scripts/views/reports/AuditLayout.js |  1 +
 security-admin/src/main/webapp/styles/xa.css    | 19 ++++++
 .../templates/policies/PermissionList.html      |  2 +-
 5 files changed, 40 insertions(+), 51 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/f4a7037d/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js 
b/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
index 326c84c..45d4d15 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
@@ -173,13 +173,11 @@ define(function(require) {
                                        } else {
                                                that.model.unset(name+'Name');
                                        }
-                                       that.toggleAddButton(e);
                                        return;
                                }
                                if(!_.isUndefined(e.added)){
                                        var nameList = 
_.map($(e.currentTarget).select2("data"), function(obj){return obj.text});
                                        
that.model.set(name+'Name',nameList.toString());
-                                       that.toggleAddButton(e);
                                }
                        });
                },
@@ -520,7 +518,6 @@ define(function(require) {
                evDelete : function(){
                        var that = this;
                        this.collection.remove(this.model);
-                       this.toggleAddButton();
                },
                evClickTD : function(e){
                        var $el = $(e.currentTarget);
@@ -552,34 +549,6 @@ define(function(require) {
                        perms = _.map(perms,function(obj){return 
obj.permType;});
                        XAUtil.checkDirtyField(permList, perms, this.$el);
                },
-               toggleAddButton : function(e){
-                       var grpTemp = [], usrTemp = [];
-                       this.collection.each(function(m){
-                               if(!_.isUndefined(m.get('groupName')) && 
!_.isNull(m.get('groupName'))){
-                                       grpTemp.push.apply(grpTemp, 
m.get('groupName').split(','));
-                               }
-                               if(!_.isUndefined(m.get('userName')) && 
!_.isNull(m.get('userName'))){
-                                       usrTemp.push.apply(usrTemp, 
m.get('userName').split(','));
-                               }       
-                       });
-                       if(!_.isUndefined(e)){
-                               if( !_.isUndefined(e.added)){
-                                       if((grpTemp.length ) == 
this.groupList.length && ((usrTemp.length) == this.userList.length)){
-                                               
$('[data-action="addGroup"]').hide();
-                                       } else {
-                                               
$('[data-action="addGroup"]').show();
-                                       }
-                               } 
-                               if(!_.isUndefined(e.removed))
-                                       $('[data-action="addGroup"]').show();
-                       } else {
-                               if((grpTemp.length ) == this.groupList.length 
&& ((usrTemp.length) == this.userList.length)){
-                                       $('[data-action="addGroup"]').hide();
-                               } else {
-                                       $('[data-action="addGroup"]').show();
-                               }
-                       }
-               },
                policyCondtionChange :function(e){
                        if(!_.isEmpty($(e.currentTarget).val()) && 
!_.isEmpty(this.policyConditions)){
                                var policyCond = { 'type' : 
$(e.currentTarget).attr('data-js'), 'value' : $(e.currentTarget).val() } ;
@@ -717,30 +686,13 @@ define(function(require) {
                                this.collection.add(new Backbone.Model());
                },
                onRender : function(){
+                       this.makePolicyItemSortable();
                },
 
                addNew : function(){
                        var that =this;
                        this.collection.add(new Backbone.Model());
                },
-               toggleAddButton : function(){
-                       var groupNames=[], userNames=[];
-                       this.collection.each(function(m){
-                               if(!_.isUndefined(m.get('groupName'))){
-                                       var temp = 
m.get('groupName').split(',');
-                                       groupNames.push.apply(groupNames,temp);
-                               }
-                               if(!_.isUndefined(m.get('userName'))){
-                                       var temp = m.get('userName').split(',');
-                                       userNames.push.apply(userNames,temp);
-                               }
-                       });
-                       if(groupNames.length == this.groupList.length && 
userNames.length == this.userList.length ){
-                               this.$('button[data-action="addGroup"]').hide();
-                       } else {
-                               this.$('button[data-action="addGroup"]').show();
-                       }
-               },
                getPermHeaders : function(){
                        var permList = [];
                        if(this.rangerServiceDefModel.get('name') != 
XAEnums.ServiceType.SERVICE_TAG.label){
@@ -780,7 +732,23 @@ define(function(require) {
                                        this.accessTypes =  
_.map(rowFilterDef.accessTypes, function(m){return 
_.findWhere(this.accessTypes, {'name' : m.name });}, this);
                                }
                        }
+               },
+               makePolicyItemSortable : function(){
+                       var that = this, draggedModel;
+                       this.$el.find(".js-formInput" ).sortable({
+                               placeholder: "ui-state-highlight",
+                               start : function(event, ui){
+                                       var row = ui.item[0].rowIndex - 1;
+                                       draggedModel = that.collection.at(row);
+                               },
+                               stop : function(event, ui){
+                                       var row = ui.item[0].rowIndex -1;
+                                       that.collection.remove(draggedModel, { 
silent : true});
+                                       that.collection.add(draggedModel ,{ at: 
row, silent : true });
+                                       
that.$el.find(ui.item[0]).addClass("dirtyField");
+                               },
+                       });
                }
        });
 
-});
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/f4a7037d/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js 
b/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js
index bac6c34..aae7543 100644
--- 
a/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js
+++ 
b/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js
@@ -98,6 +98,7 @@ define(function(require){
                },
 
                initializeServices : function(){
+                       this.services.setPageSize(100);
                        this.services.fetch({
                           cache : false,
                           async : false

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/f4a7037d/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js 
b/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js
index 623ae03..23e8b54 100644
--- a/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js
+++ b/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js
@@ -293,6 +293,7 @@ define(function(require) {
                                                switch (facet) {
                                                        case 'Service Name':
                                                                var serviceList 
        = new RangerServiceList();
+                                                               
serviceList.setPageSize(100);
                                                                
serviceList.fetch().done(function(){
                                                                        
callback(serviceList.map(function(model){return model.get('name');}));
                                                                });

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/f4a7037d/security-admin/src/main/webapp/styles/xa.css
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/styles/xa.css 
b/security-admin/src/main/webapp/styles/xa.css
index 1613015..f8e7273 100644
--- a/security-admin/src/main/webapp/styles/xa.css
+++ b/security-admin/src/main/webapp/styles/xa.css
@@ -1918,3 +1918,22 @@ input[type="radio"], input[type="checkbox"] {margin-top: 
0;}
 .controls-margin {
        margin-left: 90px !important;
 }
+.permissionItemSortable > tr > td:first-child {
+  padding-left: 20px;
+  position: relative;
+}
+.permissionItemSortable > tr:not(.ui-state-highlight) > td:first-child:after {
+  content: '';
+  position: absolute;
+   box-sizing: border-box;
+   left: 5px;
+   top: 10%;
+   height: 80%;
+   width: 6px;
+   border: 2px dotted rgba(0,0,0,0.25);
+   background: transparent;
+   cursor: move;
+}
+.permissionItemSortable > tr:hover > td:first-child:after {
+  border-color: rgba(0,0,0,0.5);
+}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/f4a7037d/security-admin/src/main/webapp/templates/policies/PermissionList.html
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/templates/policies/PermissionList.html 
b/security-admin/src/main/webapp/templates/policies/PermissionList.html
index 68c7931..9216376 100644
--- a/security-admin/src/main/webapp/templates/policies/PermissionList.html
+++ b/security-admin/src/main/webapp/templates/policies/PermissionList.html
@@ -35,7 +35,7 @@
 
                                </tr>
                        </thead>
-                       <tbody class="js-formInput">
+                       <tbody class="js-formInput permissionItemSortable">
 
                        </tbody>
                </table>

Reply via email to