[PATCH] Fix Add Network window

VLans and Interfaces must only be available for selection if network type Bridge is selected. This restriction was not implemented in the UI. This patch fixes this problem. Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo@linux.vnet.ibm.com> --- ui/js/src/kimchi.network.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/ui/js/src/kimchi.network.js b/ui/js/src/kimchi.network.js index faf1285..4c25ad0 100644 --- a/ui/js/src/kimchi.network.js +++ b/ui/js/src/kimchi.network.js @@ -210,11 +210,33 @@ kimchi.openNetworkDialog = function(okCallback) { $("#networkConfig").dialog("open"); }; +kimchi.enableBridgeOptions = function(enable) { + var ifaces = document.getElementById("networkInterface").getElementsByTagName("option"); + for (var i = 0; i < ifaces.length; i++) { + ifaces[i].disabled = (!enable); + if (!enable) { + ifaces[i].selected = false; + } + else if (!$("#networkInterface").val()) { + ifaces[0].selected = true; + } + } + $("#enableVlan").prop("disabled", !enable); + if (!$("#networkTypeBri").prop("checked")) { + $("#enableVlan").attr("checked", false); + $("#networkVlanID").prop("disabled", true); + $("#networkVlanID").val(""); + } +}; + kimchi.setDefaultNetworkType = function(isInterfaceAvail) { $("#networkTypeBri").prop("checked", isInterfaceAvail); $("#networkTypeBri").prop("disabled", !isInterfaceAvail); $("#networkInterface").prop("disabled", !isInterfaceAvail); $("#networkTypeNat").prop("checked", !isInterfaceAvail); + if (!isInterfaceAvail) { + kimchi.enableBridgeOptions(false); + } }; kimchi.getNetworkDialogValues = function() { @@ -250,12 +272,15 @@ kimchi.setupNetworkFormEvent = function() { }); $("#networkTypeIso").on("click", function(event) { $("#networkInterface").prop("disabled", true); + kimchi.enableBridgeOptions(false); }); $("#networkTypeNat").on("click", function(event) { $("#networkInterface").prop("disabled", true); + kimchi.enableBridgeOptions(false); }); $("#networkTypeBri").on("click", function(event) { $("#networkInterface").prop("disabled", false); + kimchi.enableBridgeOptions(true); }); }; -- 1.8.5.3

On 02/26/2014 03:17 AM, Rodrigo Trujillo wrote:
VLans and Interfaces must only be available for selection if network type Bridge is selected. This restriction was not implemented in the UI. This patch fixes this problem.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo@linux.vnet.ibm.com> --- ui/js/src/kimchi.network.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
diff --git a/ui/js/src/kimchi.network.js b/ui/js/src/kimchi.network.js index faf1285..4c25ad0 100644 --- a/ui/js/src/kimchi.network.js +++ b/ui/js/src/kimchi.network.js @@ -210,11 +210,33 @@ kimchi.openNetworkDialog = function(okCallback) { $("#networkConfig").dialog("open"); };
+kimchi.enableBridgeOptions = function(enable) { + var ifaces = document.getElementById("networkInterface").getElementsByTagName("option"); + for (var i = 0; i < ifaces.length; i++) { + ifaces[i].disabled = (!enable); + if (!enable) { + ifaces[i].selected = false; + } + else if (!$("#networkInterface").val()) { + ifaces[0].selected = true; + } + } + $("#enableVlan").prop("disabled", !enable); + if (!$("#networkTypeBri").prop("checked")) { + $("#enableVlan").attr("checked", false); + $("#networkVlanID").prop("disabled", true); + $("#networkVlanID").val(""); + } +}; + kimchi.setDefaultNetworkType = function(isInterfaceAvail) { $("#networkTypeBri").prop("checked", isInterfaceAvail); $("#networkTypeBri").prop("disabled", !isInterfaceAvail); $("#networkInterface").prop("disabled", !isInterfaceAvail); $("#networkTypeNat").prop("checked", !isInterfaceAvail); + if (!isInterfaceAvail) { + kimchi.enableBridgeOptions(false); + } };
kimchi.getNetworkDialogValues = function() { @@ -250,12 +272,15 @@ kimchi.setupNetworkFormEvent = function() { }); $("#networkTypeIso").on("click", function(event) { $("#networkInterface").prop("disabled", true); + kimchi.enableBridgeOptions(false); }); $("#networkTypeNat").on("click", function(event) { $("#networkInterface").prop("disabled", true); + kimchi.enableBridgeOptions(false); }); $("#networkTypeBri").on("click", function(event) { $("#networkInterface").prop("disabled", false); + kimchi.enableBridgeOptions(true); }); };
I don't have much knowledge about js. But it seems we can improve it a little bit. The following change based your patch works for me. diff --git a/ui/js/src/kimchi.network.js b/ui/js/src/kimchi.network.js index 4c25ad0..467050c 100644 --- a/ui/js/src/kimchi.network.js +++ b/ui/js/src/kimchi.network.js @@ -211,28 +211,24 @@ kimchi.openNetworkDialog = function(okCallback) { }; kimchi.enableBridgeOptions = function(enable) { - var ifaces = document.getElementById("networkInterface").getElementsByTagName("option"); - for (var i = 0; i < ifaces.length; i++) { - ifaces[i].disabled = (!enable); - if (!enable) { - ifaces[i].selected = false; - } - else if (!$("#networkInterface").val()) { - ifaces[0].selected = true; - } - } $("#enableVlan").prop("disabled", !enable); - if (!$("#networkTypeBri").prop("checked")) { + $("#networkInterface").prop("disabled", !enable); + + if (!enable) { $("#enableVlan").attr("checked", false); $("#networkVlanID").prop("disabled", true); $("#networkVlanID").val(""); + $("#networkInterface").val(""); + } else { + $("#networkInterface").prop("selectedIndex", 0); } + + }; kimchi.setDefaultNetworkType = function(isInterfaceAvail) { $("#networkTypeBri").prop("checked", isInterfaceAvail); $("#networkTypeBri").prop("disabled", !isInterfaceAvail); - $("#networkInterface").prop("disabled", !isInterfaceAvail); $("#networkTypeNat").prop("checked", !isInterfaceAvail); if (!isInterfaceAvail) { kimchi.enableBridgeOptions(false);

Thanks Mark, makes the code more understandable =] However, you missed one case: - Suppose you click on Bridge, and you have more than 1 interface - You select any other interface than "0", click on Vlan and fill a Vlan ID - If you click in Bridged option again, the interface selection will move to "0" (vlan fields remain unchanged). This may lead to an error. I am sending a new version of the patch. Rodrigo On 02/26/2014 09:06 AM, Mark Wu wrote:
On 02/26/2014 03:17 AM, Rodrigo Trujillo wrote:
VLans and Interfaces must only be available for selection if network type Bridge is selected. This restriction was not implemented in the UI. This patch fixes this problem.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo@linux.vnet.ibm.com> --- ui/js/src/kimchi.network.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
diff --git a/ui/js/src/kimchi.network.js b/ui/js/src/kimchi.network.js index faf1285..4c25ad0 100644 --- a/ui/js/src/kimchi.network.js +++ b/ui/js/src/kimchi.network.js @@ -210,11 +210,33 @@ kimchi.openNetworkDialog = function(okCallback) { $("#networkConfig").dialog("open"); };
+kimchi.enableBridgeOptions = function(enable) { + var ifaces = document.getElementById("networkInterface").getElementsByTagName("option"); + for (var i = 0; i < ifaces.length; i++) { + ifaces[i].disabled = (!enable); + if (!enable) { + ifaces[i].selected = false; + } + else if (!$("#networkInterface").val()) { + ifaces[0].selected = true; + } + } + $("#enableVlan").prop("disabled", !enable); + if (!$("#networkTypeBri").prop("checked")) { + $("#enableVlan").attr("checked", false); + $("#networkVlanID").prop("disabled", true); + $("#networkVlanID").val(""); + } +}; + kimchi.setDefaultNetworkType = function(isInterfaceAvail) { $("#networkTypeBri").prop("checked", isInterfaceAvail); $("#networkTypeBri").prop("disabled", !isInterfaceAvail); $("#networkInterface").prop("disabled", !isInterfaceAvail); $("#networkTypeNat").prop("checked", !isInterfaceAvail); + if (!isInterfaceAvail) { + kimchi.enableBridgeOptions(false); + } };
kimchi.getNetworkDialogValues = function() { @@ -250,12 +272,15 @@ kimchi.setupNetworkFormEvent = function() { }); $("#networkTypeIso").on("click", function(event) { $("#networkInterface").prop("disabled", true); + kimchi.enableBridgeOptions(false); }); $("#networkTypeNat").on("click", function(event) { $("#networkInterface").prop("disabled", true); + kimchi.enableBridgeOptions(false); }); $("#networkTypeBri").on("click", function(event) { $("#networkInterface").prop("disabled", false); + kimchi.enableBridgeOptions(true); }); };
I don't have much knowledge about js. But it seems we can improve it a little bit. The following change based your patch works for me.
diff --git a/ui/js/src/kimchi.network.js b/ui/js/src/kimchi.network.js index 4c25ad0..467050c 100644 --- a/ui/js/src/kimchi.network.js +++ b/ui/js/src/kimchi.network.js @@ -211,28 +211,24 @@ kimchi.openNetworkDialog = function(okCallback) { };
kimchi.enableBridgeOptions = function(enable) { - var ifaces = document.getElementById("networkInterface").getElementsByTagName("option"); - for (var i = 0; i < ifaces.length; i++) { - ifaces[i].disabled = (!enable); - if (!enable) { - ifaces[i].selected = false; - } - else if (!$("#networkInterface").val()) { - ifaces[0].selected = true; - } - } $("#enableVlan").prop("disabled", !enable); - if (!$("#networkTypeBri").prop("checked")) { + $("#networkInterface").prop("disabled", !enable); + + if (!enable) { $("#enableVlan").attr("checked", false); $("#networkVlanID").prop("disabled", true); $("#networkVlanID").val(""); + $("#networkInterface").val(""); + } else { + $("#networkInterface").prop("selectedIndex", 0); } + + };
kimchi.setDefaultNetworkType = function(isInterfaceAvail) { $("#networkTypeBri").prop("checked", isInterfaceAvail); $("#networkTypeBri").prop("disabled", !isInterfaceAvail); - $("#networkInterface").prop("disabled", !isInterfaceAvail); $("#networkTypeNat").prop("checked", !isInterfaceAvail); if (!isInterfaceAvail) { kimchi.enableBridgeOptions(false);
_______________________________________________ Kimchi-devel mailing list Kimchi-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/kimchi-devel
participants (2)
-
Mark Wu
-
Rodrigo Trujillo