(function($, cloudStack) { cloudStack.ipRules = function(args) { return function(detailArgs) { var context = detailArgs.context; var portMultiEdit = function(args) { return $('
').multiEdit(args); }; var makeMultiEditPanel = function($item, options) { if (!options) options = {}; if ($item.closest('li').hasClass('disabled')) return false; var targetId = $item.attr('net-target'); var targetName = $item.parent().find('.name').find('span').html(); var target = args[targetId]; var $browser = $item.closest('.detail-view').data('view-args').$browser; $browser.cloudBrowser('addPanel', { title: options.title ? options.title : targetName, maximizeIfSelected: true, complete: function($newPanel) { $newPanel.detailView({ $browser: $browser, name: targetId, context: context, tabs: { network: { title: options.title ? options.title : targetName, custom: function(args) { return portMultiEdit($.extend(target, { context: context })); } } } }); } }); return true; }; var staticNATChart = function(args) { var $chart = $('#template').find('.network-chart.static-nat').clone(); var $vmName = $chart.find('li.static-nat-enabled .vmname'); var $browser = $('#browser .container'); var vmDataProvider = args.vmDataProvider; var vmDetails = args.vmDetails; args.staticNATDataProvider({ context: context, response: { success: function(args) { var vmID = args.data.virtualmachineid; var vmName = args.data.virtualmachinename; $vmName.append( $('').html('VM: ' + vmName) ); $vmName.click(function() { $browser.cloudBrowser('addPanel', { title: 'Static NAT VM Details', complete: function($newPanel) { vmDataProvider({ context: context, response: { success: function(args) { var instance = args.data; var detailViewArgs = $.extend(true, {}, vmDetails, { $browser: $browser, context: $.extend(true, {}, context, { instances: [instance] }), jsonObj: instance, id: instance.id }); // No actions available detailViewArgs.actions = {}; $newPanel.detailView(detailViewArgs); } } }); } }); }); } } }); $chart.find('li.firewall .view-details').click(function() { makeMultiEditPanel($(this), { title: 'NAT Port Range'}); }); return $chart; }; var netChart = function(args) { var $chart = $('#template').find('.network-chart.normal').clone(); var preFilter = args.preFilter ? args.preFilter({ items: ['firewall', 'portForwarding', 'loadBalancing'], context: context }) : []; // Filter disabled tabs if (preFilter.length) { if (preFilter.length == 3) { // All items // Assume this is a static NAT return staticNATChart(args); } else { $(preFilter).each(function() { var id = this; var $li = $chart.find('li').filter(function() { return $(this).hasClass(id); }).addClass('disabled'); }); } } $chart.find('.view-details').click(function() { makeMultiEditPanel($(this)); return false; }); return $chart; }; return netChart(args); }; }; })(jQuery, cloudStack);