Merge ~steverydz/maas:add-url-params-for-tabs into maas:master

Proposed by Steve Rydz
Status: Merged
Approved by: Steve Rydz
Approved revision: 368305d03b03b43b17675cebb13c2a58b3313b4c
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~steverydz/maas:add-url-params-for-tabs
Merge into: maas:master
Diff against target: 114 lines (+27/-12)
3 files modified
src/maasserver/static/js/angular/controllers/node_details.js (+6/-0)
src/maasserver/static/js/angular/controllers/tests/test_node_details.js (+9/-0)
src/maasserver/static/partials/node-details.html (+12/-12)
Reviewer Review Type Date Requested Status
Anthony Dillon Approve
Blake Rouse (community) Approve
Review via email: mp+366924@code.launchpad.net

Commit message

LP: #1826174 - Add section name to URL to persist tabs

Description of the change

QA steps:
- Go to a machine or a controller page
- Click on any of the tabs and reload the page
- See that the same tab is open

To post a comment you must log in.
Revision history for this message
Blake Rouse (blake-rouse) wrote :

Nice!

review: Approve
Revision history for this message
Anthony Dillon (ya-bo-ng) wrote :

LGTM, finally! +1

review: Approve

There was an error fetching revisions from git servers. Please try again in a few minutes. If the problem persists, contact Launchpad support.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/static/js/angular/controllers/node_details.js b/src/maasserver/static/js/angular/controllers/node_details.js
2index a1f8a25..a1e0964 100644
3--- a/src/maasserver/static/js/angular/controllers/node_details.js
4+++ b/src/maasserver/static/js/angular/controllers/node_details.js
5@@ -135,6 +135,12 @@ function NodeDetailsController(
6 limit: 10
7 };
8
9+ // Add parameters to URL so tab state persists
10+ $scope.openSection = function(sectionName) {
11+ $scope.section.area = sectionName;
12+ $location.search("area", sectionName);
13+ };
14+
15 // Updates the page title.
16 function updateTitle() {
17 if ($scope.node && $scope.node.fqdn) {
18diff --git a/src/maasserver/static/js/angular/controllers/tests/test_node_details.js b/src/maasserver/static/js/angular/controllers/tests/test_node_details.js
19index b6f90c0..913b5e4 100644
20--- a/src/maasserver/static/js/angular/controllers/tests/test_node_details.js
21+++ b/src/maasserver/static/js/angular/controllers/tests/test_node_details.js
22@@ -2409,4 +2409,13 @@ describe("NodeDetailsController", function() {
23 );
24 });
25 });
26+
27+ describe("openSection", function() {
28+ it("sets section.area to passed argument", function() {
29+ makeController();
30+ $scope.node = node;
31+ $scope.openSection("controllers");
32+ expect($scope.section.area).toBe("controllers");
33+ });
34+ });
35 });
36diff --git a/src/maasserver/static/partials/node-details.html b/src/maasserver/static/partials/node-details.html
37index 8c3f295..f0f758a 100755
38--- a/src/maasserver/static/partials/node-details.html
39+++ b/src/maasserver/static/partials/node-details.html
40@@ -281,62 +281,62 @@
41 <li class="p-tabs__item" role="presentation">
42 <a role="tab" class="p-tabs__link" data-ng-if="!isController && !isDevice"
43 data-ng-class="{ 'is-active': section.area === 'summary'}"
44- data-ng-click="section.area = 'summary'">Machine summary</a>
45+ data-ng-click="openSection('summary')">Machine summary</a>
46 </li>
47 <li class="p-tabs__item" role="presentation">
48 <a role="tab" class="p-tabs__link" data-ng-if="isController"
49 data-ng-class="{ 'is-active': section.area === 'summary'}"
50- data-ng-click="section.area = 'summary'">Controller summary</a>
51+ data-ng-click="openSection('summary')">Controller summary</a>
52 </li>
53 <li class="p-tabs__item" role="presentation">
54 <a role="tab" class="p-tabs__link" data-ng-if="isDevice"
55 data-ng-class="{ 'is-active': section.area === 'summary'}"
56- data-ng-click="section.area = 'summary'">Device summary</a>
57+ data-ng-click="openSection('summary')">Device summary</a>
58 </li>
59 <li class="p-tabs__item" role="presentation">
60 <a role="tab" class="p-tabs__link" data-ng-if="!isController && devices.length"
61 data-ng-class="{ 'is-active': section.area === 'containers'}"
62- data-ng-click="section.area = 'containers'">Containers</a>
63+ data-ng-click="openSection('containers')">Containers</a>
64 </li>
65 <li class="p-tabs__item" role="presentation">
66 <a role="tab" class="p-tabs__link" data-ng-if="isController"
67 data-ng-class="{ 'is-active': section.area === 'vlans'}"
68- data-ng-click="section.area = 'vlans'">VLANs</a>
69+ data-ng-click="openSection('vlans')">VLANs</a>
70 </li>
71 <li class="p-tabs__item" role="presentation">
72 <a role="tab" class="p-tabs__link"
73 data-ng-class="{ 'is-active': section.area === 'interfaces'}"
74- data-ng-click="section.area = 'interfaces'">Interfaces</a>
75+ data-ng-click="openSection('interfaces')">Interfaces</a>
76 </li>
77 <li class="p-tabs__item" role="presentation">
78 <a role="tab" class="p-tabs__link" data-ng-if="!isDevice && !(isController && node.status === 'New')"
79 data-ng-class="{ 'is-active': section.area === 'storage'}"
80- data-ng-click="section.area = 'storage'">Storage</a>
81+ data-ng-click="openSection('storage')">Storage</a>
82 </li>
83 <li class="p-tabs__item" role="presentation">
84 <a role="tab" class="p-tabs__link" data-ng-if="node.commissioning_script_count > 0"
85 data-ng-class="{ 'is-active': section.area === 'commissioning'}"
86- data-ng-click="section.area = 'commissioning'"><span data-maas-script-status="script-status" data-script-status="node.commissioning_status"></span> Commissioning</a>
87+ data-ng-click="openSection('commissioning')"><span data-maas-script-status="script-status" data-script-status="node.commissioning_status"></span> Commissioning</a>
88 </li>
89 <li class="p-tabs__item" role="presentation">
90 <a role="tab" class="p-tabs__link" data-ng-if="node.testing_script_count > 0"
91 data-ng-class="{ 'is-active': section.area === 'testing'}"
92- data-ng-click="section.area = 'testing'"><span data-maas-script-status="script-status" data-script-status="node.testing_status"></span> Hardware tests</a>
93+ data-ng-click="openSection('testing')"><span data-maas-script-status="script-status" data-script-status="node.testing_status"></span> Hardware tests</a>
94 </li>
95 <li class="p-tabs__item" role="presentation">
96 <a role="tab" class="p-tabs__link" data-ng-if="node.has_logs"
97 data-ng-class="{ 'is-active': section.area === 'logs'}"
98- data-ng-click="section.area = 'logs'"><span data-maas-script-status="script-status" data-script-status="node.installation_status" data-ng-if="node.installation_status !== -1"></span> Logs</a>
99+ data-ng-click="openSection('logs')"><span data-maas-script-status="script-status" data-script-status="node.installation_status" data-ng-if="node.installation_status !== -1"></span> Logs</a>
100 </li>
101 <li class="p-tabs__item" role="presentation">
102 <a role="tab" class="p-tabs__link" data-ng-if="!isDevice"
103 data-ng-class="{ 'is-active': section.area === 'events'}"
104- data-ng-click="section.area = 'events'">Events</a>
105+ data-ng-click="openSection('events')">Events</a>
106 </li>
107 <li class="p-tabs__item" role="presentation">
108 <a role="tab" class="p-tabs__link" data-ng-if="canEdit()"
109 data-ng-class="{ 'is-active': section.area === 'configuration'}"
110- data-ng-click="section.area = 'configuration'">Configuration</a>
111+ data-ng-click="openSection('configuration')">Configuration</a>
112 </li>
113 </ul>
114 </div>

Subscribers

People subscribed via source and target branches