[Kimchi-devel] [PATCH] PCI filter not in sync with device listing

Socorro Stoppler socorro at linux.vnet.ibm.com
Thu Sep 10 14:41:23 UTC 2015


From: Socorro Stoppler <socorrob at us.ibm.com>

When editing the VM, in the PCI tab, removing a device or adding a pci
to the list, only the '+' or '-' icon changes but the list doesn't get 
refreshed.  This behavior is ok when in the 'All' filter.  However, when
in the 'ToAdd' filter, the device should no longer be shown after it has 
been added and same behavior should occur when in 'Added' filter after 
it has been removed.

Signed-off-by: Socorro Stoppler <socorrob at us.ibm.com>
---
 ui/js/src/kimchi.guest_edit_main.js | 67 ++++++++++++++++++++-----------------
 1 file changed, 37 insertions(+), 30 deletions(-)

diff --git a/ui/js/src/kimchi.guest_edit_main.js b/ui/js/src/kimchi.guest_edit_main.js
index fc1b4c1..682b044 100644
--- a/ui/js/src/kimchi.guest_edit_main.js
+++ b/ui/js/src/kimchi.guest_edit_main.js
@@ -429,26 +429,31 @@ kimchi.guest_edit_main = function() {
             filterNodes("", $("#permission-avail-groups"));
         });
     }
-    var filterPCINodes = function(group, text){
-            text = text.toLowerCase();
-            $(".body", "#form-guest-edit-pci").children().each(function(){
-                var textFilter = $(".name", this).text().toLowerCase().indexOf(text)!=-1;
-                textFilter = textFilter || $(".product", this).text().toLowerCase().indexOf(text)!=-1;
-                textFilter = textFilter || $(".vendor", this).text().toLowerCase().indexOf(text)!=-1;
-                var display = "none";
-                var itemGroup = $("button", this).button("option", "icons").primary;
-                if(textFilter){
-                    if(group == "all"){
-                        display = "";
-                    }else if(group=="toAdd" && itemGroup=="ui-icon-plus"){
-                        display = ""
-                    }else if(group == "added" && itemGroup=="ui-icon-minus"){
-                        display = ""
-                    }
+    var filterPCINodes = function(group, text, targetName, targetIcon){
+        text = text.toLowerCase();
+        targetName = targetName.toLowerCase();
+        $(".body", "#form-guest-edit-pci").children().each(function(){
+            var currentName = $(".name", this).text().toLowerCase();
+            var textFilter = currentName.indexOf(text)!=-1;
+            textFilter = textFilter || $(".product", this).text().toLowerCase().indexOf(text)!=-1;
+            textFilter = textFilter || $(".vendor", this).text().toLowerCase().indexOf(text)!=-1;
+            var display = "none";
+            var itemGroup = $("button", this).button("option", "icons").primary;
+            if (currentName == targetName){
+                itemGroup = targetIcon;                 
+            }
+            if(textFilter){
+                if(group == "all"){
+                    display = "";
+                }else if(group=="toAdd" && itemGroup=="ui-icon-plus"){
+                    display = ""
+                }else if(group == "added" && itemGroup=="ui-icon-minus"){
+                    display = ""
                 }
-                $(this).css("display", display);
-            });
-        }
+            }
+            $(this).css("display", display);
+        });
+    }
     var setupPCIDevice = function(){
         kimchi.getAvailableHostPCIDevices(function(hostPCIs){
             kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs){
@@ -457,24 +462,23 @@ kimchi.guest_edit_main = function() {
             });
         });
         $("select", "#form-guest-edit-pci").change(function(){
-            filterPCINodes($(this).val(), $("input", "#form-guest-edit-pci").val());
+            filterPCINodes($(this).val(), $("input", "#form-guest-edit-pci").val(), "", "");
         });
         $("input", "#form-guest-edit-pci").on("keyup", function() {
-            filterPCINodes($("select", "#form-guest-edit-pci").val(), $(this).val());
+            filterPCINodes($("select", "#form-guest-edit-pci").val(), $(this).val(), "", "");
         });
     };
-
-    var setupNode = function(arrPCIDevices, iconClass) {
+    var setupNode = function(arrPCIDevices, iconClass){
         var pciEnabled = kimchi.capabilities.kernel_vfio;
-        var pciDeviceName, pciDeviceProduct, pciDeviceProductDesc, pciDeviceVendor, pciDeviceVendorDesc;
+        var pciDeviceName, pciDeviceProduct, pciDeviceProductDesc, pciDeviceVendor, pciDeviceVendorDesc;        
         for(var i=0; i<arrPCIDevices.length; i++){
             pciDeviceName = arrPCIDevices[i].name;
             pciDeviceProduct = arrPCIDevices[i].product;
             pciDeviceVendor = arrPCIDevices[i].vendor;
-            if(pciDeviceProduct!=null) {
+            if(pciDeviceProduct!=null){
                 pciDeviceProductDesc = pciDeviceProduct.description;
             }
-            if(pciDeviceVendor!=null) {
+            if(pciDeviceVendor!=null){
                 pciDeviceVendorDesc = pciDeviceVendor.description;
             }
             var itemNode = $.parseHTML(kimchi.substitute($('#pci-tmpl').html(),{
@@ -489,8 +493,9 @@ kimchi.guest_edit_main = function() {
                 text: false
             }).click(function(){
                 var obj = $(this);
+                var id = obj.parent().prop("id");
                 if(obj.button("option", "icons").primary == "ui-icon-minus"){
-                    kimchi.removeVMPCIDevice(kimchi.selectedGuest, obj.parent().prop("id"), function(){
+                    kimchi.removeVMPCIDevice(kimchi.selectedGuest, id, function(){
                         kimchi.getAvailableHostPCIDevices(function(arrPCIDevices1){
                             kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){
                                 for(var k=0; k<arrPCIDevices1.length; k++) {
@@ -501,16 +506,18 @@ kimchi.guest_edit_main = function() {
                                 }
                             });
                         });
-                        filterPCINodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val());
+                        //id is for the object that is being added back to the available PCI devices
+                        filterPCINodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val(), id, "ui-icon-plus");
                     });
                 } else {
-                    kimchi.addVMPCIDevice(kimchi.selectedGuest, { name: obj.parent().prop("id") }, function(){
+                    kimchi.addVMPCIDevice(kimchi.selectedGuest, { name: id }, function(){
                         kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){
                             for(var k=0; k<vmPCIs1.length; k++) {
                                 $("button", "#" + vmPCIs1[k].name).button("option", "icons", {primary: "ui-icon-minus"});
                             }
                         });
-                        filterPCINodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val());
+                        //id is for the object that is being removed from the available PCI devices
+                        filterPCINodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val(), id, "ui-icon-minus");
                     });
                 }
             });
-- 
1.9.1




More information about the Kimchi-devel mailing list