(function($, cloudStack) { /** * Make system zone 'org' chart */ cloudStack.zoneChart = function(args) { return function(listViewArgs) { var naas = cloudStack.sections.system.naas; var $browser = listViewArgs.$browser; var $charts = $('
').addClass('system-charts'); var context = listViewArgs.context; /** * Generates provider-wide actions */ var providerActions = function(actions, options) { if (!options) options = {}; var $actions = $('
').addClass('main-actions'); var allowedActions = options.actionFilter ? options.actionFilter({ actions: $.map(actions, function(value, key) { return key; }) }) : null; $.each(actions, function(actionID, action) { if (allowedActions && $.inArray(actionID, allowedActions) == -1) return true; var $action = $('
').addClass('button action main-action'); $action.addClass(actionID); $action.append($('').addClass('icon')); $action.append($('').html(action.label)); $action.click(function() { action.action({ context: { zones: listViewArgs.context.physicalResources }, response: { success: function(args) { $(window).trigger('cloudStack.fullRefresh'); if (options.success) options.success($.extend(args, { action: action })); } } }); }); $action.appendTo($actions); return true; }); return $actions; }; /** * Render specified network's system chart */ var chartView = function(network) { var $chartView = $('
').addClass('system-chart-view') .append($('#template').find('div.zone-chart').clone()); var $naasView = $chartView.find('.resources.naas ul.system-main'); var networkStatus = naas.networkProviders.statusCheck({ context: $.extend(true, {}, context, { systemNetworks: [network] }) }); // Update title var $title = $chartView.find('.head span'); $title.html($title.html() + ' - ' + network.name); // Render network provider items var $networkProviders = $('
    ') .appendTo( $('
  • ').addClass('network-providers').appendTo($naasView) ); $.each(naas.networkProviders.types, function(name, type) { var status = networkStatus[name]; var statusLabel = naas.networkProviders.statusLabels ? naas.networkProviders.statusLabels[status] : {}; var $item = $('
  • ').addClass('provider') .attr('rel', name) .attr('network-status', status) .addClass(name).addClass(status) .appendTo($networkProviders) .append($('
    ').addClass('name').html(type.label)) .append($('
    ').addClass('status') .append($('').html( statusLabel ? statusLabel : status ))) .append($('
    ').addClass('view-all configure').html('Configure')); }); // View all action $chartView.find('ul li div.view-all').click(function() { var $target = $(this); if ($target.hasClass('configure')) return false; var $panel = $browser.cloudBrowser('addPanel', { title: $target.closest('li').find('div.name span').html(), data: '', noSelectPanel: true, maximizeIfSelected: true, complete: function($newPanel) { $panel.listView( $.extend(cloudStack.sections.system.subsections[ $target.attr('zone-target') ], { $browser: $browser, $chartView: $chartView, ref: { zoneID: listViewArgs.id }, context: { zones: listViewArgs.context.physicalResources } }) ); } }); return false; }); // View details action $chartView.find('ul li div.view-details').click(function() { var $target = $(this); var $panel = $browser.cloudBrowser('addPanel', { title: 'Zone Details', data: '', noSelectPanel: true, maximizeIfSelected: true, complete: function($newPanel) { // Create detail view $.extend(args.detailView, { id: listViewArgs.id, context: { zones: listViewArgs.context.physicalResources }, $browser: listViewArgs.$browser }); $panel.detailView(args.detailView); } }); return false; }); // Add Resource button action $chartView.find('#add_resource_button').click(function() { var completeAction = function() { return false; }; var $addResource = $('
    ').addClass('add-zone-resource'); var $header = $('
    ').addClass('head').appendTo($addResource) .append( $('').addClass('message').html('Select resource to add:') ); var $select = $('