Browse Source

[security] Fix roles refresh after add or modify

Hive Autocomplete works on focus too now
Enrico Berti 11 years ago
parent
commit
5cfdc8a

+ 7 - 1
apps/security/static/js/common.ko.js

@@ -104,10 +104,16 @@ ko.bindingHandlers.hivechooser = {
     self.val(valueAccessor()());
     self.val(valueAccessor()());
     function setPathFromAutocomplete(path){
     function setPathFromAutocomplete(path){
       self.val(path);
       self.val(path);
-      self.change();
+      self.blur();
     }
     }
+
+    self.on("blur", function(){
+      valueAccessor()(self.val());
+    });
+
     self.jHueHiveAutocomplete({
     self.jHueHiveAutocomplete({
       skipColumns: true,
       skipColumns: true,
+      showOnFocus: true,
       home: "/",
       home: "/",
       onPathChange: function (path) {
       onPathChange: function (path) {
         setPathFromAutocomplete(path);
         setPathFromAutocomplete(path);

+ 28 - 4
apps/security/static/js/hive.ko.js

@@ -142,6 +142,21 @@ var Role = function (vm, role) {
   self.privilegesForViewTo = ko.observable(49);
   self.privilegesForViewTo = ko.observable(49);
   self.originalPrivileges = ko.observableArray();
   self.originalPrivileges = ko.observableArray();
   self.showPrivileges = ko.observable(false);
   self.showPrivileges = ko.observable(false);
+  self.showPrivileges.subscribe(function (value) {
+    var _expanded = vm.expandedRoles();
+    if (value) {
+      if (_expanded.indexOf(self.name()) == -1) {
+        _expanded.push(self.name());
+      }
+    }
+    else {
+      if (_expanded.indexOf(self.name()) > -1) {
+        _expanded.splice(_expanded.indexOf(self.name()), 1);
+      }
+    }
+    vm.expandedRoles(_expanded);
+  });
+
   self.showEditGroups = ko.observable(false);
   self.showEditGroups = ko.observable(false);
   self.isEditing = ko.observable(false);
   self.isEditing = ko.observable(false);
 
 
@@ -227,7 +242,7 @@ var Role = function (vm, role) {
         var role = new Role(vm, data.role);
         var role = new Role(vm, data.role);
         vm.originalRoles.unshift(role);
         vm.originalRoles.unshift(role);
         vm.assist.refreshTree();
         vm.assist.refreshTree();
-        vm.list_sentry_privileges_by_role(role); // Show privileges
+        vm.refreshExpandedRoles();
       } else {
       } else {
         $(document).trigger("error", data.message);
         $(document).trigger("error", data.message);
       }
       }
@@ -247,7 +262,7 @@ var Role = function (vm, role) {
         self.reset();
         self.reset();
         $(document).trigger("updated.role");
         $(document).trigger("updated.role");
         vm.assist.refreshTree();
         vm.assist.refreshTree();
-        vm.list_sentry_privileges_by_role(role); // Show privileges
+        vm.refreshExpandedRoles();
       } else {
       } else {
         $(document).trigger("error", data.message);
         $(document).trigger("error", data.message);
       }
       }
@@ -278,9 +293,8 @@ var Role = function (vm, role) {
       role: ko.mapping.toJSON(role)
       role: ko.mapping.toJSON(role)
     }, function (data) {
     }, function (data) {
       if (data.status == 0) {
       if (data.status == 0) {
-        vm.list_sentry_roles_by_group();
         vm.list_sentry_privileges_by_authorizable();
         vm.list_sentry_privileges_by_authorizable();
-        vm.list_sentry_privileges_by_role(role); // Refresh all role privileges
+        vm.refreshExpandedRoles();
       } else {
       } else {
         $(document).trigger("error", data.message);
         $(document).trigger("error", data.message);
       }
       }
@@ -820,6 +834,8 @@ var HiveViewModel = function (initial) {
     });
     });
   };
   };
 
 
+  self.expandedRoles = ko.observableArray([]);
+
   self.init = function (path) {
   self.init = function (path) {
     self.assist.isLoadingTree(true);
     self.assist.isLoadingTree(true);
     self.fetchUsers();
     self.fetchUsers();
@@ -871,6 +887,14 @@ var HiveViewModel = function (initial) {
     });
     });
   };
   };
 
 
+  self.refreshExpandedRoles = function () {
+    ko.utils.arrayForEach(self.filteredRoles(), function (r) {
+      if (self.expandedRoles().indexOf(r.name()) > -1){
+        self.list_sentry_privileges_by_role(r);
+      }
+    });
+  }
+
   self.showRole = function (role) {
   self.showRole = function (role) {
     $(document).trigger("show.role", role);
     $(document).trigger("show.role", role);
     ko.utils.arrayForEach(self.filteredRoles(), function (r) {
     ko.utils.arrayForEach(self.filteredRoles(), function (r) {

+ 27 - 15
desktop/core/static/js/jquery.hiveautocomplete.js

@@ -31,7 +31,8 @@
         onPathChange: function () {
         onPathChange: function () {
         },
         },
         smartTooltip: "",
         smartTooltip: "",
-        smartTooltipThreshold: 10 // needs 10 up/down or click actions and no tab to activate the smart tooltip
+        smartTooltipThreshold: 10, // needs 10 up/down or click actions and no tab to activate the smart tooltip
+        showOnFocus: false
       };
       };
 
 
   function Plugin(element, options) {
   function Plugin(element, options) {
@@ -118,12 +119,12 @@
       $("#jHueHiveAutocomplete").css("top", _el.offset().top + _el.outerHeight() - 1).css("left", _el.offset().left).width(_el.outerWidth() - 4);
       $("#jHueHiveAutocomplete").css("top", _el.offset().top + _el.outerHeight() - 1).css("left", _el.offset().left).width(_el.outerWidth() - 4);
     });
     });
 
 
-    var _hdfsAutocompleteSelectedIndex = -1;
+    var _hiveAutocompleteSelectedIndex = -1;
     var _filterTimeout = -1;
     var _filterTimeout = -1;
     _el.keyup(function (e) {
     _el.keyup(function (e) {
       window.clearTimeout(_filterTimeout);
       window.clearTimeout(_filterTimeout);
       if ($.inArray(e.keyCode, [17, 38, 40, 13, 32, 191]) == -1) {
       if ($.inArray(e.keyCode, [17, 38, 40, 13, 32, 191]) == -1) {
-        _hdfsAutocompleteSelectedIndex = -1;
+        _hiveAutocompleteSelectedIndex = -1;
         _filterTimeout = window.setTimeout(function () {
         _filterTimeout = window.setTimeout(function () {
           var path = _el.val();
           var path = _el.val();
           if (path.indexOf(".") > -1) {
           if (path.indexOf(".") > -1) {
@@ -140,43 +141,49 @@
         }, 500);
         }, 500);
       }
       }
       if (e.keyCode == 38) {
       if (e.keyCode == 38) {
-        if (_hdfsAutocompleteSelectedIndex <= 0) {
-          _hdfsAutocompleteSelectedIndex = $("#jHueHiveAutocomplete ul li:visible").length - 1;
+        if (_hiveAutocompleteSelectedIndex <= 0) {
+          _hiveAutocompleteSelectedIndex = $("#jHueHiveAutocomplete ul li:visible").length - 1;
         }
         }
         else {
         else {
-          _hdfsAutocompleteSelectedIndex--;
+          _hiveAutocompleteSelectedIndex--;
         }
         }
       }
       }
       if (e.keyCode == 40) {
       if (e.keyCode == 40) {
-        if (_hdfsAutocompleteSelectedIndex == $("#jHueHiveAutocomplete ul li:visible").length - 1) {
-          _hdfsAutocompleteSelectedIndex = 0;
+        if (_hiveAutocompleteSelectedIndex == $("#jHueHiveAutocomplete ul li:visible").length - 1) {
+          _hiveAutocompleteSelectedIndex = 0;
         }
         }
         else {
         else {
-          _hdfsAutocompleteSelectedIndex++;
+          _hiveAutocompleteSelectedIndex++;
         }
         }
       }
       }
       if (e.keyCode == 38 || e.keyCode == 40) {
       if (e.keyCode == 38 || e.keyCode == 40) {
         smartTooltipMaker();
         smartTooltipMaker();
         $("#jHueHiveAutocomplete ul li").removeClass("active");
         $("#jHueHiveAutocomplete ul li").removeClass("active");
-        $("#jHueHiveAutocomplete ul li:visible").eq(_hdfsAutocompleteSelectedIndex).addClass("active");
-        $("#jHueHiveAutocomplete .popover-content").scrollTop($("#jHueHiveAutocomplete ul li:visible").eq(_hdfsAutocompleteSelectedIndex).prevAll().length * $("#jHueHiveAutocomplete ul li:visible").eq(_hdfsAutocompleteSelectedIndex).outerHeight());
+        $("#jHueHiveAutocomplete ul li:visible").eq(_hiveAutocompleteSelectedIndex).addClass("active");
+        $("#jHueHiveAutocomplete .popover-content").scrollTop($("#jHueHiveAutocomplete ul li:visible").eq(_hiveAutocompleteSelectedIndex).prevAll().length * $("#jHueHiveAutocomplete ul li:visible").eq(_hiveAutocompleteSelectedIndex).outerHeight());
       }
       }
       if ((e.keyCode == 32 && e.ctrlKey) || e.keyCode == 191) {
       if ((e.keyCode == 32 && e.ctrlKey) || e.keyCode == 191) {
         smartTooltipMaker();
         smartTooltipMaker();
         showHiveAutocomplete();
         showHiveAutocomplete();
       }
       }
       if (e.keyCode == 13) {
       if (e.keyCode == 13) {
-        if (_hdfsAutocompleteSelectedIndex > -1) {
-          $("#jHueHiveAutocomplete ul li:visible").eq(_hdfsAutocompleteSelectedIndex).click();
+        if (_hiveAutocompleteSelectedIndex > -1) {
+          $("#jHueHiveAutocomplete ul li:visible").eq(_hiveAutocompleteSelectedIndex).click();
         }
         }
         else {
         else {
           _this.options.onEnter($(this));
           _this.options.onEnter($(this));
         }
         }
         $("#jHueHiveAutocomplete").hide();
         $("#jHueHiveAutocomplete").hide();
-        _hdfsAutocompleteSelectedIndex = -1;
+        _hiveAutocompleteSelectedIndex = -1;
       }
       }
     });
     });
 
 
+    if (_this.options.showOnFocus){
+      _el.on("focus", function(){
+        showHiveAutocomplete();
+      });
+    }
+
     var _pauseBlur = false;
     var _pauseBlur = false;
 
 
     _el.blur(function () {
     _el.blur(function () {
@@ -271,6 +278,11 @@
                 if (! _this.options.skipColumns) {
                 if (! _this.options.skipColumns) {
                   showHiveAutocomplete();
                   showHiveAutocomplete();
                 }
                 }
+                else {
+                  _this.options.onEnter(_el);
+                  $("#jHueHiveAutocomplete").hide();
+                  _hiveAutocompleteSelectedIndex = -1;
+                }
               }
               }
 
 
               if ($(this).html().indexOf("columns") > -1){
               if ($(this).html().indexOf("columns") > -1){
@@ -281,7 +293,7 @@
                   _el.val(_el.val() + "." + item);
                   _el.val(_el.val() + "." + item);
                 }
                 }
                 $("#jHueHiveAutocomplete").hide();
                 $("#jHueHiveAutocomplete").hide();
-                _hdfsAutocompleteSelectedIndex = -1;
+                _hiveAutocompleteSelectedIndex = -1;
                 _this.options.onEnter(_el);
                 _this.options.onEnter(_el);
               }
               }