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);
|