Pārlūkot izejas kodu

[security] Fix for checked items problem

Enrico Berti 11 gadi atpakaļ
vecāks
revīzija
2be819093d

+ 1 - 1
apps/security/src/security/templates/hdfs.mako

@@ -202,7 +202,7 @@ ${ layout.menubar(section='hdfs') }
       <div class="span6">
         <h4>${ _('Checked paths') }</h4>
         <ul class="unstyled modal-panel" data-bind="foreach: $root.assist.checkedItems">
-          <li><a class="force-word-break" data-bind="attr: { href: '/filebrowser/view' + path() }, text: path()" target="_blank" title="${ _('Open in File Browser') }" rel="tooltip"></a></li>
+          <li><a class="force-word-break" data-bind="attr: { href: '/filebrowser/view' + path }, text: path" target="_blank" title="${ _('Open in File Browser') }" rel="tooltip"></a></li>
         </ul>
       </div>
       <div class="span6">

+ 3 - 3
apps/security/src/security/templates/hive.mako

@@ -46,10 +46,10 @@ ${ layout.menubar(section='hive') }
       <a class="pointer" style="margin-right: 4px" data-bind="click: function() { if (editing()) { editing(false); }}"><i class="fa fa-eye"></i></a>
       <a class="pointer" style="margin-right: 4px" data-bind="click: remove"><i class="fa fa-times"></i></a>
     </div>
-    <input name="db" data-bind="attr: { name: 'privilege-' + $index() }" type="radio" checked/>
+    <input value="db" data-bind="attr: { name: 'privilege-' + $index() }" type="radio" checked="checked" />
     <input type="text" data-bind="hivechooser: $data.path" placeholder="dbName.tableName">
 
-    <input name="uri" data-bind="attr: { name: 'privilege-' + $index() }" type="radio"/>
+    <input value="uri" data-bind="attr: { name: 'privilege-' + $index() }" type="radio"/>
     <input type="text" data-bind="filechooser: $data.URI" placeholder="URI">
 
     <select data-bind="options: $root.availableActions, select2: { update: $data.action, type: 'action'}" style="width: 100px"></select>
@@ -339,7 +339,7 @@ ${ layout.menubar(section='hive') }
       <div class="span6">
         <h4>${ _('Checked items') }</h4>
         <ul class="unstyled modal-panel" data-bind="foreach: $root.assist.checkedItems">
-          <li><span class="force-word-break" data-bind="text: path()"></span></li>
+          <li><span class="force-word-break" data-bind="text: path"></span></li>
         </ul>
       </div>
       <div class="span6">

+ 1 - 1
apps/security/static/css/security.css

@@ -281,6 +281,6 @@ h1.emptyMessage {
   display: none;
 }
 
-.big-btn:hover .bulk-action-description {
+.big-btn:hover .bulk-action-description, .big-btn.selected .bulk-action-description {
   display: block;
 }

+ 20 - 6
apps/security/static/js/hdfs.ko.js

@@ -337,15 +337,29 @@ var Assist = function (vm, assist) {
     self.setPath(obj, true);
   }
 
-  self.checkPath = function (obj) {
-    obj.isChecked(!obj.isChecked());
-    if (obj.isChecked()) {
-      self.checkedItems.push(obj);
+  self.getCheckedItems = function (leaf, checked) {
+    if (leaf == null){
+      leaf = self.growingTree();
     }
-    else {
-      self.checkedItems.remove(obj);
+    if (checked == null){
+      checked = []
+    }
+    if (leaf.isChecked){
+      checked.push(leaf);
     }
+    if (leaf.nodes.length > 0) {
+      leaf.nodes.forEach(function (node) {
+        self.getCheckedItems(node, checked);
+      });
+    }
+    return checked;
+  }
+
+
+  self.checkPath = function (obj) {
+    obj.isChecked(!obj.isChecked());
     self.updatePathProperty(self.growingTree(), obj.path(), "isChecked", obj.isChecked());
+    self.checkedItems(self.getCheckedItems());
   }
 
   self.openPath = function (obj) {

+ 20 - 6
apps/security/static/js/hive.ko.js

@@ -475,15 +475,29 @@ var Assist = function (vm, initial) {
     self.setPath(obj, true);
   }
 
-  self.checkPath = function (obj) {
-    obj.isChecked(!obj.isChecked());
-    if (obj.isChecked()) {
-      self.checkedItems.push(obj);
+  self.getCheckedItems = function (leaf, checked) {
+    if (leaf == null){
+      leaf = self.growingTree();
     }
-    else {
-      self.checkedItems.remove(obj);
+    if (checked == null){
+      checked = []
+    }
+    if (leaf.isChecked){
+      checked.push(leaf);
     }
+    if (leaf.nodes.length > 0) {
+      leaf.nodes.forEach(function (node) {
+        self.getCheckedItems(node, checked);
+      });
+    }
+    return checked;
+  }
+
+
+  self.checkPath = function (obj) {
+    obj.isChecked(!obj.isChecked());
     self.updatePathProperty(self.growingTree(), obj.path(), "isChecked", obj.isChecked());
+    self.checkedItems(self.getCheckedItems());
   }
 
   self.getTreeAdditionalDataForPath = function (path) {