Network Step uses controller-as syntax

Brings the Launch Instance (Angular) feature up to par with the other
steps by using controller-as syntax.

Change-Id: I458f597f69c4487de008a064a89d1ba247b6436a
Closes-Bug: 1455126
This commit is contained in:
Matt Borland 2015-05-14 10:12:40 -06:00
parent 9543c7232a
commit 8e917a36c2
3 changed files with 68 additions and 67 deletions

View File

@ -1,42 +1,42 @@
<div ng-controller="LaunchInstanceNetworkCtrl">
<h1>{$ ::label.title $}</h1>
<div ng-controller="LaunchInstanceNetworkCtrl as ctrl">
<h1>{$ ::ctrl.label.title $}</h1>
<div class="content">
<div class="subtitle">{$ ::label.subtitle $}</div>
<div class="subtitle">{$ ::ctrl.label.subtitle $}</div>
<div class="form-group" ng-if="model.arePortProfilesSupported">
<label class="control-label required" for="profile">{$ ::label.profile $}</label>
<label class="control-label required" for="profile">{$ ::ctrl.label.profile $}</label>
<select class="form-control" id="profile" ng-model="model.newInstanceSpec.profile" ng-options="profile.name for profile in model.profiles">
<option value="">{$ ::label.none_option $}</option>
<option value="">{$ ::ctrl.label.none_option $}</option>
</select>
</div>
<transfer-table tr-model="tableDataMulti" help-text="tableHelpText" limits="tableLimits">
<allocated validate-number-min="1" ng-model="tableDataMulti.allocated.length">
<table st-table="tableDataMulti.displayedAllocated" st-safe-src="tableDataMulti.allocated" hz-table
<transfer-table tr-model="ctrl.tableDataMulti" help-text="ctrl.tableHelpText" limits="ctrl.tableLimits">
<allocated validate-number-min="1" ng-model="ctrl.tableDataMulti.allocated.length">
<table st-table="ctrl.tableDataMulti.displayedAllocated" st-safe-src="ctrl.tableDataMulti.allocated" hz-table
class="table-striped table-rsp table-detail modern">
<thead>
<tr>
<th class="reorder"></th>
<th class="expander"></th>
<th class="rsp-p1">{$ ::label.network $}</th>
<th class="rsp-p2">{$ ::label.subnet_associated $}</th>
<th class="rsp-p1">{$ ::label.shared $}</th>
<th class="rsp-p1">{$ ::label.admin_state $}</th>
<th class="rsp-p1">{$ ::label.status $}</th>
<th class="rsp-p1">{$ ::ctrl.label.network $}</th>
<th class="rsp-p2">{$ ::ctrl.label.subnet_associated $}</th>
<th class="rsp-p1">{$ ::ctrl.label.shared $}</th>
<th class="rsp-p1">{$ ::ctrl.label.admin_state $}</th>
<th class="rsp-p1">{$ ::ctrl.label.status $}</th>
<th></th>
</tr>
</thead>
<tbody>
<tr ng-if="tableDataMulti.allocated.length === 0">
<tr ng-if="ctrl.tableDataMulti.allocated.length === 0">
<td colspan="8">
<div class="no-rows-help">
{$ ::trCtrl.helpText.noneAllocText $}
</div>
</td>
</tr>
<tr ng-repeat-start="row in tableDataMulti.displayedAllocated track by row.id"
lr-drag-data="tableDataMulti.displayedAllocated" lr-drag-src="reorder"
<tr ng-repeat-start="row in ctrl.tableDataMulti.displayedAllocated track by row.id"
lr-drag-data="ctrl.tableDataMulti.displayedAllocated" lr-drag-src="reorder"
lr-drop-target="reorder" lr-drop-success="trCtrl.updateAllocated(e, item, collection)">
<td class="reorder">
<span class="fa fa-sort" title="{$ ::trCtrl.helpText.orderText $}"></span>
@ -51,8 +51,8 @@
<div ng-repeat="subnet in row.subnets">{$ subnet.name $}</div>
</td>
<td class="rsp-p1">{$ row.shared | yesno $}</td>
<td class="rsp-p1">{$ row.admin_state | decode:networkAdminStates $}</td>
<td class="rsp-p1">{$ row.status | decode:networkStatuses $}</td>
<td class="rsp-p1">{$ row.admin_state | decode:ctrl.networkAdminStates $}</td>
<td class="rsp-p1">{$ row.status | decode:ctrl.networkStatuses $}</td>
<td class="action-col">
<action-list>
<action action-classes="'btn btn-sm btn-default'"
@ -66,25 +66,25 @@
<td colspan="2"></td>
<td colspan="7" class="detail">
<dl class="dl-horizontal">
<dt>{$ ::label.id $}</dt>
<dt>{$ ::ctrl.label.id $}</dt>
<dd>{$ row.id $}</dd>
<dt>{$ ::label.project_id $}</dt>
<dt>{$ ::ctrl.label.project_id $}</dt>
<dd>{$ row.tenant_id $}</dd>
<dt>{$ ::label.external_network $}</dt>
<dt>{$ ::ctrl.label.external_network $}</dt>
<dd>{$ row['router:external'] | yesno $}</dd>
</dl>
<div><b>{$ ::label.provider_network $}</b></div>
<div><b>{$ ::ctrl.label.provider_network $}</b></div>
<div class="row" class="detail">
<dl class="col-sm-3">
<dt>{$ ::label.provider_network_type $}</dt>
<dt>{$ ::ctrl.label.provider_network_type $}</dt>
<dd>{$ row['provider:network_type'] $}</dd>
</dl>
<dl class="col-sm-3">
<dt>{$ ::label.provider_segmentation_id $}</dt>
<dt>{$ ::ctrl.label.provider_segmentation_id $}</dt>
<dd>{$ row['provider:segmentation_id'] $}</dd>
</dl>
<dl class="col-sm-3">
<dt>{$ ::label.provider_physical_network $}</dt>
<dt>{$ ::ctrl.label.provider_physical_network $}</dt>
<dd>{$ row['provider:physical_network'] $}</dd>
</dl>
</div>
@ -94,7 +94,7 @@
</table>
</allocated>
<available>
<table st-table="tableDataMulti.displayedAvailable" st-safe-src="tableDataMulti.available"
<table st-table="ctrl.tableDataMulti.displayedAvailable" st-safe-src="ctrl.tableDataMulti.available"
hz-table class="table-striped table-rsp table-detail modern">
<thead>
<tr>
@ -106,11 +106,11 @@
<tr>
<th class="reorder"></th>
<th class="expander"></th>
<th st-sort-default class="rsp-p1">{$ ::label.network $}</th>
<th class="rsp-p2">{$ ::label.subnet_associated $}</th>
<th class="rsp-p1">{$ ::label.shared $}</th>
<th class="rsp-p1">{$ ::label.admin_state $}</th>
<th class="rsp-p1">{$ ::label.status $}</th>
<th st-sort-default class="rsp-p1">{$ ::ctrl.label.network $}</th>
<th class="rsp-p2">{$ ::ctrl.label.subnet_associated $}</th>
<th class="rsp-p1">{$ ::ctrl.label.shared $}</th>
<th class="rsp-p1">{$ ::ctrl.label.admin_state $}</th>
<th class="rsp-p1">{$ ::ctrl.label.status $}</th>
<th></th>
</tr>
</thead>
@ -122,7 +122,7 @@
</div>
</td>
</tr>
<tr ng-repeat-start="row in tableDataMulti.displayedAvailable track by row.id" ng-if="!trCtrl.allocatedIds[row.id]">
<tr ng-repeat-start="row in ctrl.tableDataMulti.displayedAvailable track by row.id" ng-if="!trCtrl.allocatedIds[row.id]">
<td class="reorder"></td>
<td class="expander">
<span class="fa fa-chevron-right" hz-expand-detail
@ -133,8 +133,8 @@
<div ng-repeat="subnet in row.subnets">{$ subnet.name $}</div>
</td>
<td class="rsp-p1">{$ row.shared | yesno $}</td>
<td class="rsp-p1">{$ row.admin_state | decode:networkAdminStates $}</td>
<td class="rsp-p1">{$ row.status | decode:networkStatuses $}</td>
<td class="rsp-p1">{$ row.admin_state | decode:ctrl.networkAdminStates $}</td>
<td class="rsp-p1">{$ row.status | decode:ctrl.networkStatuses $}</td>
<td class="action-col">
<action-list button-tooltip="row.warningMessage"
bt-model="trCtrl.tooltipModel" bt-disabled="!row.disabled"
@ -153,25 +153,25 @@
<td colspan="2"></td>
<td colspan="7" class="detail">
<dl class="dl-horizontal">
<dt>{$ ::label.id $}</dt>
<dt>{$ ::ctrl.label.id $}</dt>
<dd>{$ row.id $}</dd>
<dt>{$ ::label.project_id $}</dt>
<dt>{$ ::ctrl.label.project_id $}</dt>
<dd>{$ row.tenant_id $}</dd>
<dt>{$ ::label.external_network $}</dt>
<dt>{$ ::ctrl.label.external_network $}</dt>
<dd>{$ row['router:external'] | yesno $}</dd>
</dl>
<div><b>{$ ::label.provider_network $}</b></div>
<div><b>{$ ::ctrl.label.provider_network $}</b></div>
<div class="row">
<dl class="col-sm-3">
<dt>{$ ::label.provider_network_type $}</dt>
<dt>{$ ::ctrl.label.provider_network_type $}</dt>
<dd>{$ row['provider:network_type'] $}</dd>
</dl>
<dl class="col-sm-3">
<dt>{$ ::label.provider_segmentation_id $}</dt>
<dt>{$ ::ctrl.label.provider_segmentation_id $}</dt>
<dd>{$ row['provider:segmentation_id'] $}</dd>
</dl>
<dl class="col-sm-3">
<dt>{$ ::label.provider_physical_network $}</dt>
<dt>{$ ::ctrl.label.provider_physical_network $}</dt>
<dd>{$ row['provider:physical_network'] $}</dd>
</dl>
</div>

View File

@ -46,8 +46,9 @@
]);
function LaunchInstanceNetworkCtrl($scope) {
var ctrl = this;
$scope.label = {
ctrl.label = {
title: gettext('Networks'),
subtitle: gettext('Networks provide the communication channels for instances in the cloud.'),
network: gettext('Network'),
@ -66,28 +67,28 @@
provider_physical_network: gettext('Physical Network')
};
$scope.networkStatuses = {
ctrl.networkStatuses = {
'ACTIVE': gettext('Active'),
'DOWN': gettext('Down')
};
$scope.networkAdminStates = {
ctrl.networkAdminStates = {
'UP': gettext('Up'),
'DOWN': gettext('Down')
};
$scope.tableDataMulti = {
ctrl.tableDataMulti = {
available: $scope.model.networks,
allocated: $scope.model.newInstanceSpec.networks,
displayedAvailable: [],
displayedAllocated: []
};
$scope.tableLimits = {
ctrl.tableLimits = {
maxAllocation: -1
};
$scope.tableHelpText = {
ctrl.tableHelpText = {
allocHelpText: gettext('Select networks from those listed below.'),
availHelpText: gettext('Select at least one network')
};

View File

@ -31,41 +31,41 @@
}));
it('has correct network statuses', function() {
expect(scope.networkStatuses).toBeDefined();
expect(scope.networkStatuses.ACTIVE).toBeDefined();
expect(scope.networkStatuses.DOWN).toBeDefined();
expect(Object.keys(scope.networkStatuses).length).toBe(2);
expect(ctrl.networkStatuses).toBeDefined();
expect(ctrl.networkStatuses.ACTIVE).toBeDefined();
expect(ctrl.networkStatuses.DOWN).toBeDefined();
expect(Object.keys(ctrl.networkStatuses).length).toBe(2);
});
it('has correct network admin states', function() {
expect(scope.networkAdminStates).toBeDefined();
expect(scope.networkAdminStates.UP).toBeDefined();
expect(scope.networkAdminStates.DOWN).toBeDefined();
expect(Object.keys(scope.networkStatuses).length).toBe(2);
expect(ctrl.networkAdminStates).toBeDefined();
expect(ctrl.networkAdminStates.UP).toBeDefined();
expect(ctrl.networkAdminStates.DOWN).toBeDefined();
expect(Object.keys(ctrl.networkStatuses).length).toBe(2);
});
it('defines a multiple-allocation table', function() {
expect(scope.tableLimits).toBeDefined();
expect(scope.tableLimits.maxAllocation).toBe(-1);
expect(ctrl.tableLimits).toBeDefined();
expect(ctrl.tableLimits.maxAllocation).toBe(-1);
});
it('contains its own labels', function() {
expect(scope.label).toBeDefined();
expect(Object.keys(scope.label).length).toBeGreaterThan(0);
expect(ctrl.label).toBeDefined();
expect(Object.keys(ctrl.label).length).toBeGreaterThan(0);
});
it('contains help text for the table', function() {
expect(scope.tableHelpText).toBeDefined();
expect(scope.tableHelpText.allocHelpText).toBeDefined();
expect(scope.tableHelpText.availHelpText).toBeDefined();
expect(ctrl.tableHelpText).toBeDefined();
expect(ctrl.tableHelpText.allocHelpText).toBeDefined();
expect(ctrl.tableHelpText.availHelpText).toBeDefined();
});
it('uses scope to set table data', function() {
expect(scope.tableDataMulti).toBeDefined();
expect(scope.tableDataMulti.available).toEqual(['net-a', 'net-b']);
expect(scope.tableDataMulti.allocated).toEqual(['net-a']);
expect(scope.tableDataMulti.displayedAllocated).toEqual([]);
expect(scope.tableDataMulti.displayedAvailable).toEqual([]);
expect(ctrl.tableDataMulti).toBeDefined();
expect(ctrl.tableDataMulti.available).toEqual(['net-a', 'net-b']);
expect(ctrl.tableDataMulti.allocated).toEqual(['net-a']);
expect(ctrl.tableDataMulti.displayedAllocated).toEqual([]);
expect(ctrl.tableDataMulti.displayedAvailable).toEqual([]);
});
});