').addClass('loading-overlay');
var $actions = args.$actions;
var actionArgs = args.action.action;
var action = actionArgs.action;
var actionID = args.action.id;
var notification = actionArgs.notification;
var label = actionArgs.label;
var context = args.context;
var actionPreFilter = args.actionPreFilter;
var success = function(args) {
var remove = args ? args.remove : false;
var _custom = args ? args._custom : {};
var updateVMLoadingState = function() {
var pendingVMs = $tier.data('vpc-tier-pending-vms');
pendingVMs = pendingVMs ? pendingVMs - 1 : 0;
if (!pendingVMs) {
$tier.data('vpc-tier-pending-vms', 0);
$tier.removeClass('loading');
} else {
$tier.data('vpc-tier-pending-vms', pendingVMs);
}
};
cloudStack.ui.notifications.add(
// Notification
{
desc: label,
poll: notification.poll,
_custom: _custom
},
// Success
function(args) {
if (actionID == 'addVM') {
// Increment VM total
var $total = $tier.find('.vm-count .total');
var prevTotal = parseInt($total.html());
var newTotal = prevTotal + 1;
var newVM = args.data;
var newContext = $.extend(true, {}, context, {
vms: [newVM]
});
$total.html(newTotal);
filterActions({
$actions: $actions,
actionPreFilter: actionPreFilter,
context: newContext
});
updateVMLoadingState();
} else if (actionID == 'remove') { //remove tier
$loading.remove();
$tier.remove();
} else {
$loading.remove();
}
},
{},
// Error
function(args) {
if (actionID == 'addVM') {
updateVMLoadingState();
} else {
$loading.remove();
}
}
);
};
switch (actionID) {
case 'addVM':
action({
context: context,
complete: function(args) {
var pendingVMs = $tier.data('vpc-tier-pending-vms');
pendingVMs = pendingVMs ? pendingVMs + 1 : 1;
$tier.addClass('loading');
$tier.data('vpc-tier-pending-vms', pendingVMs);
success(args);
}
});
break;
case 'remove':
$loading.appendTo($tier);
action({
context: context,
response: {
success: function(args) {
success($.extend(args, {
remove: true
}));
}
}
});
break;
case 'acl':
elems.aclDialog({
isDialog: true,
actionArgs: actionArgs,
context: context
}).closest('.ui-dialog').overlay();
break;
default:
$loading.appendTo($tier);
action({
context: context,
complete: success,
response: {
success: success,
error: function(args) {
$loading.remove();
}
}
});
}
};
// Appends a new tier to chart
var addNewTier = function(args) {
var ipAddresses = args.ipAddresses;
var acl = args.acl;
var actions = args.actions;
var vmListView = args.vmListView;
var actionPreFilter = args.actionPreFilter;
var context = args.context;
var $browser = args.$browser;
var tierDetailView = args.tierDetailView;
var tier = $.extend(args.tier, {
ipAddresses: ipAddresses,
$browser: $browser,
detailView: tierDetailView,
context: context,
vmListView: vmListView,
actions: actions,
actionPreFilter: actionPreFilter,
acl: acl,
virtualMachines: []
});
var $tiers = args.$tiers;
$tiers.find('li.placeholder')
.before(
elems.tier(tier)
.hide()
.fadeIn('slow')
);
};
// Renders the add tier form, in a dialog
var addTierDialog = function(args) {
var ipAddresses = args.ipAddresses;
var actions = args.actions;
var context = args.context;
var vmListView = args.vmListView;
var actionPreFilter = args.actionPreFilter;
var $tiers = args.$tiers;
var $browser = args.$browser;
var tierDetailView = args.tierDetailView;
var acl = args.acl;
cloudStack.dialog.createForm({
context: context,
form: actions.add.createForm,
after: function(args) {
var $loading = $('
').addClass('loading-overlay').prependTo($tiers.find('li.placeholder'));
actions.add.action({
context: context,
data: args.data,
response: {
success: function(args) {
var tier = args.data;
cloudStack.ui.notifications.add(
// Notification
{
desc: actions.add.label
},
// Success
function(args) {
$loading.remove();
addNewTier({
ipAddresses: ipAddresses,
$browser: $browser,
tierDetailView: tierDetailView,
context: $.extend(true, {}, context, {
networks: [tier]
}),
tier: tier,
acl: acl,
$tiers: $tiers,
actions: actions,
actionPreFilter: actionPreFilter,
vmListView: vmListView
});
},
{},
// Error
function(args) {
$loading.remove();
}
);
},
error: function(errorMsg) {
cloudStack.dialog.notice({
message: _s(errorMsg)
});
$loading.remove();
}
}
});
}
});
};
cloudStack.uiCustom.vpc = function(args) {
var vmListView = args.vmListView;
var tierArgs = args.tiers;
var ipAddresses = args.ipAddresses;
var gateways = args.gateways;
var acl = args.acl;
var siteToSiteVPN = args.siteToSiteVPN;
var routerDetailView = args.routerDetailView;
return function(args) {
var context = args.context;
var $browser = $('#browser .container');
var $toolbar = $('
').addClass('toolbar');
var vpc = args.context.vpc[0];
$browser.cloudBrowser('addPanel', {
maximizeIfSelected: true,
title: _l('label.configure.vpc') + ': ' + vpc.name,
complete: function($panel) {
var $loading = $('
').addClass('loading-overlay').appendTo($panel);
$panel.append($toolbar);
// Load data
tierArgs.dataProvider({
context: context,
response: {
success: function(args) {
// Setup detail view tabs
var tierDetailView = $.extend(true, {}, tierArgs.detailView, {
tabs: {
acl: {
custom: function(args) {
var $acl = elems.aclDialog({
isDialog: false,
actionArgs: acl,
context: args.context
});
return $acl;
}
},
ipAddresses: {
custom: function(args) {
return $('
').listView(ipAddresses.listView(), {
context: args.context
});
}
}
}
});
var tiers = args.tiers;
var $chart = elems.chart({
$browser: $browser,
ipAddresses: ipAddresses,
gateways: gateways,
acl: acl,
tierDetailView: tierDetailView,
routerDetailView: routerDetailView,
siteToSiteVPN: siteToSiteVPN,
vmListView: vmListView,
context: context,
actions: tierArgs.actions,
actionPreFilter: tierArgs.actionPreFilter,
vpcName: vpc.name,
tiers: tiers
}).appendTo($panel);
$loading.remove();
$chart.fadeIn(function() {});
}
}
});
}
});
};
};
}(jQuery, cloudStack));