mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			164 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // 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 $('<div>').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 vmIP = args.data.vmipaddress;
 | |
|                             var vmName = args.data.virtualmachinename;
 | |
| 
 | |
|                             $vmName.append(
 | |
|                                 $('<span>').html('VM: ' + _s(vmName)),
 | |
|                                 $('<span>').html('<br/>VM IP: ' + vmIP)
 | |
|                             );
 | |
| 
 | |
|                             $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);
 |