mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			165 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			165 lines
		
	
	
		
			5.5 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 vmName = args.data.virtualmachinename;
 | |
| 
 | |
|               $vmName.append(
 | |
|                 $('<span>').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);
 |