diff --git a/ui/scripts/configuration.js b/ui/scripts/configuration.js index 65163aaed50..6a7b4f90055 100644 --- a/ui/scripts/configuration.js +++ b/ui/scripts/configuration.js @@ -9,11 +9,12 @@ // See the License for the specific language governing permissions and // limitations under the License. // -// Automatically generated by addcopyright.py at 04/03/2012 +// Automatically generated by addcopyright.py at 04/02/2012 (function(cloudStack, $) { var requiredNetworkOfferingExists = false; var networkServiceObjs = [], serviceCheckboxNames = []; + var serviceFields = []; cloudStack.sections.configuration = { title: 'label.menu.service.offerings', @@ -1018,7 +1019,7 @@ createForm: { title: 'label.add.network.offering', - preFilter: function(args) { + preFilter: function(args) { var $availability = args.$form.find('.form-item[rel=availability]'); var $serviceOfferingId = args.$form.find('.form-item[rel=serviceOfferingId]'); var hasAdvancedZones = false; @@ -1034,30 +1035,12 @@ } } }); - + args.$form.bind('change', function() { //when any field in the dialog is changed //check whether to show or hide availability field var $sourceNATField = args.$form.find('input[name=\"service.SourceNat.isEnabled\"]'); var $guestTypeField = args.$form.find('select[name=guestIpType]'); - var $basicSharedFields = args.$form.find('.form-item').filter(function() { - var basicSharedFields = [ - 'service.SourceNat.isEnabled', - 'service.StaticNat.isEnabled', - 'service.PortForwarding.isEnabled', - 'service.Lb.isEnabled' - ]; - - if ($.inArray($(this).attr('rel'), basicSharedFields) > -1) { - return true; - } - - if ($.inArray($(this).attr('depends-on'), basicSharedFields) > -1) { - return true; - } - - return false; - }); - + if (!requiredNetworkOfferingExists && $sourceNATField.is(':checked') && $guestTypeField.val() == 'Isolated') { @@ -1087,22 +1070,62 @@ $(':ui-dialog').dialog('option', 'position', 'center'); - if (hasAdvancedZones && $guestTypeField.val() == 'Shared') { - $basicSharedFields.hide(); - $basicSharedFields.find('input[type=checkbox]').attr('checked', false); - } else { - $basicSharedFields.each(function() { - var $field = $(this); - var $dependsOn = args.$form.find('.form-item').filter(function() { - return $(this).attr('rel') == $field.attr('depends-on'); - }); + + //hide/show service fields upon guestIpType(Shared/Isolated) and zoneType(Advanced/Basic) ***** (begin) ***** + var serviceFieldsToHide = []; + if($guestTypeField.val() == 'Shared') { //Shared network offering + if (hasAdvancedZones) { //advanced zone + serviceFieldsToHide = [ + 'service.SourceNat.isEnabled', + 'service.StaticNat.isEnabled', + 'service.PortForwarding.isEnabled', + 'service.Lb.isEnabled', + 'service.Firewall.isEnabled', + 'service.Vpn.isEnabled' + ]; + } + else { //basic zone + serviceFieldsToHide = [ + 'service.SourceNat.isEnabled', + 'service.PortForwarding.isEnabled', + 'service.Firewall.isEnabled', + 'service.Vpn.isEnabled' + ]; + } + } + else { //Isolated network offering (which supports all services) + serviceFieldsToHide = []; + } + + //hide service fields that are included in serviceFieldsToHide + var $serviceCheckboxesToHide = args.$form.find('.form-item').filter(function() { + if ($.inArray($(this).attr('rel'), serviceFieldsToHide) > -1) { + return true; + } + return false; + }); + $serviceCheckboxesToHide.hide(); + $serviceCheckboxesToHide.find('input[type=checkbox]').attr('checked', false); - if (!$field.attr('depends-on') || - $dependsOn.find('input[type=checkbox]').is(':checked')) { - $field.css('display', 'inline-block'); - } - }); - } + var $serviceProviderDropdownsToHide = args.$form.find('.form-item').filter(function() { + if ($.inArray($(this).attr('depends-on'), serviceFieldsToHide) > -1) { + return true; + } + return false; + }); + $serviceProviderDropdownsToHide.hide(); + + //show service fields that are not included in serviceFieldsToHide + for(var i=0; i < serviceFields.length; i++) { + var serviceField = serviceFields[i]; + if($.inArray(serviceField, serviceFieldsToHide) == -1) { + if(args.$form.find('.form-item[rel=\"' + serviceField + '\"]').css('display') == 'none' ) { + args.$form.find('.form-item[rel=\"' + serviceField + '\"]').css('display', 'inline-block'); + } + } + } + //hide/show service fields upon guestIpType(Shared/Isolated) and zoneType(Advanced/Basic) ***** (end) ***** + }); args.$form.change(); @@ -1161,9 +1184,10 @@ async: true, success: function(data) { networkServiceObjs = data.listsupportednetworkservicesresponse.networkservice; + serviceFields = []; var fields = {}, providerCanenableindividualserviceMap = {}, providerServicesMap = {}, providerDropdownsForciblyChangedTogether = {}; $(networkServiceObjs).each(function() { - var serviceName = this.name; + var serviceName = this.name; var providerObjs = this.provider; var serviceDisplayName; @@ -1190,6 +1214,7 @@ serviceCheckboxNames.push(id.isEnabled); fields[id.isEnabled] = { label: serviceDisplayName, isBoolean: true }; + serviceFields.push(id.isEnabled); if(providerObjs != null && providerObjs.length > 1) { //present provider dropdown when there are multiple providers for a service fields[id.provider] = {