// Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. (function($, cloudStack) { cloudStack.ipRules = function(args) { return function(detailArgs) { var context = detailArgs.context; var portMultiEdit = function(args) { return $('
').multiEdit(args); }; var makeMultiEditPanel = function($item) { 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: targetName, maximizeIfSelected: true, complete: function($newPanel) { $newPanel.detailView({ $browser: $browser, name: targetId, context: context, tabs: { network: { title: targetName, custom: function(args) { return portMultiEdit($.extend(target, { context: context })); } } } }); } }); return true; }; var staticNATChart = function(args, includingFirewall) { 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: _l('label.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); } } }); } }); }); } } }); if(includingFirewall == true) { $chart.find('li.firewall .view-details').click(function() { //makeMultiEditPanel($(this), { title: _l('label.nat.port.range')}); makeMultiEditPanel($(this)); }); } else { $chart.find('li.firewall').hide(); } 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 }) : []; // 1. choose between staticNAT chart and non-staticNAT chart 2. filter disabled tabs if (preFilter.length) { if($.inArray('nonStaticNATChart', preFilter) != -1) { //choose static NAT chart if($.inArray('firewall', preFilter) == -1) { return staticNATChart(args, true); //static NAT including Firewall } else { return staticNATChart(args, false); //static NAT excluding Firewall } } else { //choose non-static NAT chart $(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);