(function($, cloudStack) { /** * Zone wizard */ cloudStack.zoneWizard = function(args) { return function(listViewArgs) { var $wizard = $('#template').find('div.zone-wizard').clone(); var $progress = $wizard.find('div.progress ul li'); var $steps = $wizard.find('div.steps').children().hide().filter(':not(.disabled)'); var $diagramParts = $wizard.find('div.diagram').children().hide(); // Close wizard var close = function() { $wizard.dialog('destroy'); $('div.overlay').fadeOut(function() { $('div.overlay').remove(); }); }; // Save and close wizard var completeAction = function() { var data = cloudStack.serializeForm($wizard.find('form')); args.action({ data: data, response: { success: function(args) { var $item = $('.list-view').listView('prependItem', { data: [data], actionFilter: function(args) { return []; } }); listViewArgs.complete({ _custom: args._custom, $item: $item, messageArgs: { name: $wizard.find('div.review div.vm-instance-name input').val() } }); close(); }, error: function(message) { $wizard.remove(); $('div.overlay').remove(); if (message) { cloudStack.dialog.notice({ message: message }); } } } }); }; // Go to specified step in wizard, // updating nav items and diagram var showStep = function(index) { var targetIndex = index - 1; if (index <= 1) targetIndex = 0; if (targetIndex == $steps.size()) { completeAction(); } var $targetStep = $($steps.hide()[targetIndex]).show(); var formState = cloudStack.serializeForm($wizard.find('form')); if (!targetIndex) { $wizard.find('.button.previous').hide(); } else { $wizard.find('.button.previous').show(); } // Hide conditional fields by default var $conditional = $targetStep.find('.conditional'); $conditional.hide(); // Show conditional fields for advanced network models if (formState['network-model'] == 'Advanced') { if (formState['isolation-mode'] == 'vlan') { $conditional.filter('.vlan').show().find('select').trigger('change'); if ($conditional.find('select[name=vlan-type]').val() == 'tagged') { $conditional.find('select.ip-scope').trigger('change'); } } else if (formState['isolation-mode'] == 'security-groups') { $conditional.filter('.security-groups').show(); } } if (!formState['public']) { $conditional.filter('.public').show(); } // Show launch button if last step var $nextButton = $wizard.find('.button.next'); $nextButton.find('span').html('Next'); $nextButton.removeClass('final'); if ($targetStep.index() == $steps.size() - 1) { $nextButton.find('span').html('Add zone'); $nextButton.addClass('final'); } // Show relevant conditional sub-step if present if ($targetStep.has('.wizard-step-conditional')) { $targetStep.find('.wizard-step-conditional').hide(); $targetStep.find('.wizard-step-conditional.select-network').show(); } // Update progress bar var $targetProgress = $progress.removeClass('active').filter(function() { return $(this).index() <= targetIndex; }).toggleClass('active'); // Load data provider for domain dropdowns if (!$targetStep.hasClass('loaded') && (index == 2 || index == 4)) { args.steps[targetIndex]({ response: { success: function(args) { $(args.domains).each(function() { $('