Merge ~deadlight/maas:icon-fixes into ~deadlight/maas:vanilla
- Git
- lp:~deadlight/maas
- icon-fixes
- Merge into vanilla
Proposed by
Karl Williams
Status: | Merged |
---|---|
Approved by: | Karl Williams |
Approved revision: | 98089e319085958b2a8e56f6ec3347cc6a8091f6 |
Merged at revision: | e631496a8b036a163110c72ebc6db2b3357b600d |
Proposed branch: | ~deadlight/maas:icon-fixes |
Merge into: | ~deadlight/maas:vanilla |
Diff against target: |
874 lines (+126/-115) 24 files modified
src/maasserver/static/js/angular/controllers/node_details.js (+1/-1) src/maasserver/static/js/angular/directives/controller_image_status.js (+1/-1) src/maasserver/static/js/angular/directives/controller_status.js (+1/-1) src/maasserver/static/js/angular/directives/error_overlay.js (+1/-1) src/maasserver/static/js/angular/directives/maas_obj_form.js (+2/-2) src/maasserver/static/js/angular/directives/script_status.js (+7/-7) src/maasserver/static/js/angular/directives/tests/test_script_status.js (+10/-10) src/maasserver/static/partials/boot-images.html (+10/-17) src/maasserver/static/partials/cards/services.html (+5/-2) src/maasserver/static/partials/intro-user.html (+4/-5) src/maasserver/static/partials/intro.html (+1/-2) src/maasserver/static/partials/machines-table.html (+6/-6) src/maasserver/static/partials/networks-list.html (+1/-1) src/maasserver/static/partials/node-details.html (+23/-27) src/maasserver/static/partials/node-events.html (+1/-1) src/maasserver/static/partials/pod-details.html (+2/-2) src/maasserver/static/partials/script-results-list.html (+1/-4) src/maasserver/static/partials/settings.html (+1/-1) src/maasserver/static/partials/switches-table.html (+2/-2) src/maasserver/static/partials/vlan-details.html (+1/-1) src/maasserver/static/scss/_patterns_icons.scss (+32/-18) src/maasserver/static/scss/_utils.scss (+9/-0) src/maasserver/static/scss/build.scss (+1/-0) src/maasserver/templates/maasserver/zone_list.html (+3/-3) |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Anthony Dillon (community) | Approve | ||
Review via email: mp+337231@code.launchpad.net |
Commit message
Description of the change
Fixes for the styling of icons across the app.
QA:
Nodes list: see all of the icons positioned
Nodes -> contollers -> controller details:
- see the services card icon correctly positioned
- click the Events tab - see the icon displayed in the table
- click the Commissioning tab - see the icon displayed close to the name
Pod details
- see that all of the icons in the summary table are displayed correctly
Machine details:
- select the hardware tests tab - see the icon displayed closely to the name
- check Commissioning and Evens in this context and see that they're also displaying correctly
Ensure that all of the above icons work in Firefox too.
To post a comment you must log in.
Revision history for this message
Karl Williams (deadlight) wrote : | # |
I've fixed the issues that you identified.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | diff --git a/src/maasserver/static/js/angular/controllers/node_details.js b/src/maasserver/static/js/angular/controllers/node_details.js |
2 | index 1633a61..a1a8784 100644 |
3 | --- a/src/maasserver/static/js/angular/controllers/node_details.js |
4 | +++ b/src/maasserver/static/js/angular/controllers/node_details.js |
5 | @@ -1083,7 +1083,7 @@ angular.module('MAAS').controller('NodeDetailsController', [ |
6 | if(service.status === "running") { |
7 | return "success"; |
8 | } else if(service.status === "dead") { |
9 | - return "power-error"; |
10 | + return "error"; |
11 | } else if(service.status === "degraded") { |
12 | return "warning"; |
13 | } else { |
14 | diff --git a/src/maasserver/static/js/angular/directives/controller_image_status.js b/src/maasserver/static/js/angular/directives/controller_image_status.js |
15 | index 71efc55..003b22a 100644 |
16 | --- a/src/maasserver/static/js/angular/directives/controller_image_status.js |
17 | +++ b/src/maasserver/static/js/angular/directives/controller_image_status.js |
18 | @@ -126,7 +126,7 @@ angular.module('MAAS').directive('maasControllerImageStatus', |
19 | systemId: "=" |
20 | }, |
21 | template: [ |
22 | - '<i class="icon icon--loading u-animation--spin"', |
23 | + '<i class="p-icon--loading u-animation--spin"', |
24 | 'data-ng-if="showSpinner()"></i> ', |
25 | '{$ getImageStatus() $}'].join(''), |
26 | link: function(scope, element, attrs) { |
27 | diff --git a/src/maasserver/static/js/angular/directives/controller_status.js b/src/maasserver/static/js/angular/directives/controller_status.js |
28 | index a2b5514..e72607b 100644 |
29 | --- a/src/maasserver/static/js/angular/directives/controller_status.js |
30 | +++ b/src/maasserver/static/js/angular/directives/controller_status.js |
31 | @@ -8,7 +8,7 @@ angular.module('MAAS').run(['$templateCache', function ($templateCache) { |
32 | // Inject the controller-status.html into the template cache. |
33 | $templateCache.put('directive/templates/controller-status.html', [ |
34 | '<span>', |
35 | - '<span class="icon icon--{$ serviceClass $}" data-ng-if="!textOnly">', |
36 | + '<span class="p-icon--{$ serviceClass $}" data-ng-if="!textOnly">', |
37 | '</span>', |
38 | '<span data-ng-if="textOnly" data-ng-bind="serviceText"></span>', |
39 | '</span>' |
40 | diff --git a/src/maasserver/static/js/angular/directives/error_overlay.js b/src/maasserver/static/js/angular/directives/error_overlay.js |
41 | index fd33b0e..62baabc 100644 |
42 | --- a/src/maasserver/static/js/angular/directives/error_overlay.js |
43 | +++ b/src/maasserver/static/js/angular/directives/error_overlay.js |
44 | @@ -13,7 +13,7 @@ angular.module('MAAS').run(['$templateCache', function ($templateCache) { |
45 | '<header id="error-header" class="page-header" data-ng-show="show()">', |
46 | '<div class="row">', |
47 | '<h1 class="page-header__title">', |
48 | - '<span class="icon icon--loading u-animation--spin ', |
49 | + '<span class="p-icon--loading u-animation--spin ', |
50 | 'u-margin--right-small"', |
51 | 'data-ng-hide="clientError"></span>', |
52 | '{$ getTitle() $}', |
53 | diff --git a/src/maasserver/static/js/angular/directives/maas_obj_form.js b/src/maasserver/static/js/angular/directives/maas_obj_form.js |
54 | index 8cd2387..679b8ef 100644 |
55 | --- a/src/maasserver/static/js/angular/directives/maas_obj_form.js |
56 | +++ b/src/maasserver/static/js/angular/directives/maas_obj_form.js |
57 | @@ -582,7 +582,7 @@ angular.module('MAAS').directive('maasObjField', ['$compile', |
58 | && attrs.labelInfo.length > 0) { |
59 | var infoElement = angular.element('<i/>'); |
60 | infoElement.addClass('icon'); |
61 | - infoElement.addClass('icon--info'); |
62 | + infoElement.addClass('p-icon--information'); |
63 | infoElement.addClass('tooltip tooltip--left'); |
64 | infoElement.addClass('u-margin--left-tiny'); |
65 | if(attrs.labelLeft === "true") { |
66 | @@ -1070,7 +1070,7 @@ angular.module('MAAS').directive('maasObjSaving', function() { |
67 | transclude: true, |
68 | template: [ |
69 | '<span data-ng-if="saving">', |
70 | - '<i class="icon icon--loading u-animation--spin"></i>', |
71 | + '<i class="p-icon--loading u-animation--spin"></i>', |
72 | '<span data-ng-transclude></span>', |
73 | '</span>'].join(''), |
74 | link: function(scope, element, attrs, controller) { |
75 | diff --git a/src/maasserver/static/js/angular/directives/script_status.js b/src/maasserver/static/js/angular/directives/script_status.js |
76 | index d6e17d2..b1a3162 100644 |
77 | --- a/src/maasserver/static/js/angular/directives/script_status.js |
78 | +++ b/src/maasserver/static/js/angular/directives/script_status.js |
79 | @@ -7,7 +7,7 @@ |
80 | angular.module('MAAS').run(['$templateCache', function ($templateCache) { |
81 | // Inject the script_status.html into the template cache. |
82 | $templateCache.put('directive/templates/script_status.html', [ |
83 | - '<span class="icon" data-ng-class="icon" data-ng-show="show"></span>' |
84 | + '<span class="p-icon" data-ng-class="icon" data-ng-show="show"></span>' |
85 | ].join('')); |
86 | }]); |
87 | |
88 | @@ -25,17 +25,17 @@ angular.module('MAAS').directive('maasScriptStatus', function() { |
89 | switch($scope.scriptStatus) { |
90 | // SCRIPT_STATUS.PENDING |
91 | case 0: |
92 | - $scope.icon = 'icon--pending'; |
93 | + $scope.icon = 'p-icon--pending'; |
94 | break; |
95 | // SCRIPT_STATUS.RUNNING |
96 | case 1: |
97 | // SCRIPT_STATUS.INSTALLING |
98 | case 7: |
99 | - $scope.icon = 'icon--running'; |
100 | + $scope.icon = 'p-icon--running'; |
101 | break; |
102 | // SCRIPT_STATUS.PASSED |
103 | case 2: |
104 | - $scope.icon = 'icon--pass'; |
105 | + $scope.icon = 'p-icon--pass'; |
106 | break; |
107 | // SCRIPT_STATUS.FAILED |
108 | case 3: |
109 | @@ -45,18 +45,18 @@ angular.module('MAAS').directive('maasScriptStatus', function() { |
110 | case 6: |
111 | // SCRIPT_STATUS.FAILED_INSTALLING |
112 | case 8: |
113 | - $scope.icon = 'icon--power-error'; |
114 | + $scope.icon = 'p-icon--power-error'; |
115 | break; |
116 | // SCRIPT_STATUS.TIMEDOUT |
117 | case 4: |
118 | - $scope.icon = 'icon--timed-out'; |
119 | + $scope.icon = 'p-icon--timed-out'; |
120 | break; |
121 | case -1: |
122 | // No scripts have been run. |
123 | $scope.show = false; |
124 | break; |
125 | default: |
126 | - $scope.icon = 'icon--help'; |
127 | + $scope.icon = 'p-icon--help'; |
128 | break; |
129 | } |
130 | } |
131 | diff --git a/src/maasserver/static/js/angular/directives/tests/test_script_status.js b/src/maasserver/static/js/angular/directives/tests/test_script_status.js |
132 | index 70a9a31..c43d192 100644 |
133 | --- a/src/maasserver/static/js/angular/directives/tests/test_script_status.js |
134 | +++ b/src/maasserver/static/js/angular/directives/tests/test_script_status.js |
135 | @@ -36,55 +36,55 @@ describe("maasScriptStatus", function() { |
136 | it("SCRIPT_STATUS.PENDING", function() { |
137 | var directive = compileDirective("0"); |
138 | var select = directive.find("span"); |
139 | - expect(select.attr("class")).toBe("icon icon--pending"); |
140 | + expect(select.attr("class")).toBe("p-icon--pending"); |
141 | }); |
142 | |
143 | it("SCRIPT_STATUS.RUNNING", function() { |
144 | var directive = compileDirective("1"); |
145 | var select = directive.find("span"); |
146 | - expect(select.attr("class")).toBe("icon icon--running"); |
147 | + expect(select.attr("class")).toBe("p-icon--running"); |
148 | }); |
149 | |
150 | it("SCRIPT_STATUS.INSTALLING", function() { |
151 | var directive = compileDirective("7"); |
152 | var select = directive.find("span"); |
153 | - expect(select.attr("class")).toBe("icon icon--running"); |
154 | + expect(select.attr("class")).toBe("p-icon--running"); |
155 | }); |
156 | |
157 | it("SCRIPT_STATUS.PASSED", function() { |
158 | var directive = compileDirective("2"); |
159 | var select = directive.find("span"); |
160 | - expect(select.attr("class")).toBe("icon icon--pass"); |
161 | + expect(select.attr("class")).toBe("p-icon--pass"); |
162 | }); |
163 | |
164 | it("SCRIPT_STATUS.FAILED", function() { |
165 | var directive = compileDirective("3"); |
166 | var select = directive.find("span"); |
167 | - expect(select.attr("class")).toBe("icon icon--power-error"); |
168 | + expect(select.attr("class")).toBe("p-icon--power-error"); |
169 | }); |
170 | |
171 | it("SCRIPT_STATUS.ABORTED", function() { |
172 | var directive = compileDirective("5"); |
173 | var select = directive.find("span"); |
174 | - expect(select.attr("class")).toBe("icon icon--power-error"); |
175 | + expect(select.attr("class")).toBe("p-icon--power-error"); |
176 | }); |
177 | |
178 | it("SCRIPT_STATUS.DEGRADED", function() { |
179 | var directive = compileDirective("6"); |
180 | var select = directive.find("span"); |
181 | - expect(select.attr("class")).toBe("icon icon--power-error"); |
182 | + expect(select.attr("class")).toBe("p-icon--power-error"); |
183 | }); |
184 | |
185 | it("SCRIPT_STATUS.FAILED_INSTALLING", function() { |
186 | var directive = compileDirective("8"); |
187 | var select = directive.find("span"); |
188 | - expect(select.attr("class")).toBe("icon icon--power-error"); |
189 | + expect(select.attr("class")).toBe("p-icon--power-error"); |
190 | }); |
191 | |
192 | it("SCRIPT_STATUS.TIMEDOUT", function() { |
193 | var directive = compileDirective("4"); |
194 | var select = directive.find("span"); |
195 | - expect(select.attr("class")).toBe("icon icon--timed-out"); |
196 | + expect(select.attr("class")).toBe("p-icon--timed-out"); |
197 | }); |
198 | |
199 | it("NONE", function() { |
200 | @@ -96,6 +96,6 @@ describe("maasScriptStatus", function() { |
201 | it("UNKNOWN", function() { |
202 | var directive = compileDirective("99"); |
203 | var select = directive.find("span"); |
204 | - expect(select.attr("class")).toBe("icon icon--help"); |
205 | + expect(select.attr("class")).toBe("p-icon--help"); |
206 | }); |
207 | }); |
208 | diff --git a/src/maasserver/static/partials/boot-images.html b/src/maasserver/static/partials/boot-images.html |
209 | index f0b0d3d..3c9b53b 100644 |
210 | --- a/src/maasserver/static/partials/boot-images.html |
211 | +++ b/src/maasserver/static/partials/boot-images.html |
212 | @@ -114,7 +114,7 @@ |
213 | <table data-ng-if="showImagesTable()"> |
214 | <thead> |
215 | <tr> |
216 | - <th colspan="2">Release</th> |
217 | + <th>Release</th> |
218 | <th>Architecture</th> |
219 | <th>Size</th> |
220 | <th>Status</th> |
221 | @@ -123,20 +123,18 @@ |
222 | </thead> |
223 | <tbody> |
224 | <tr data-ng-if="!ltsIsSelected()"> |
225 | - <td colspan="6" aria-label="Error"> |
226 | + <td colspan="5" aria-label="Error"> |
227 | <i class="p-icon--error">Error: </i> Select at least one 14.04+ LTS release and one architecture. |
228 | </td> |
229 | </tr> |
230 | <tr data-ng-if="!commissioningSeriesSelected()"> |
231 | - <td colspan="6" aria-label="Error"> |
232 | + <td colspan="5" aria-label="Error"> |
233 | <i class="p-icon--error">Error: </i> Ubuntu {$ bootResources.ubuntu.commissioning_series $} must be selected as it is the operating system used for commissioning. |
234 | </td> |
235 | </tr> |
236 | <tr data-ng-repeat="image in ubuntuImages | orderBy:['-title', 'arch']" data-ng-class="{'is-active': canBeRemoved(image) && ubuntuDeleteId === image.resourceId}"> |
237 | - <td> |
238 | - <i class="{$ image.icon $}"></i> |
239 | - </td> |
240 | <td aria-label="Release"> |
241 | + <i class="{$ image.icon $}"></i> |
242 | {$ image.title $} <span class="p-tooltip__message" role="tooltip" id="tooltip-{$ image.resourceId}" data-ng-if="canBeRemoved(image)"><i class="p-icon--warning p-tooltip p-tooltip--top-right" aria-describedby="tooltip-{$ image.resourceId}">Image no longer exists at the source.</span></i> |
243 | </td> |
244 | <td aria-label="Architecture">{$ image.arch $}</td> |
245 | @@ -180,7 +178,7 @@ |
246 | <table class="p-table-expanding"> |
247 | <thead> |
248 | <tr> |
249 | - <th colspan="2">Name</th> |
250 | + <th>Name</th> |
251 | <th>Architecture</th> |
252 | <th>Size</th> |
253 | <th>Status</th> |
254 | @@ -188,13 +186,10 @@ |
255 | </thead> |
256 | <tbody> |
257 | <tr data-ng-if="!ubuntuCoreImages.length"> |
258 | - <td colspan="5">No images have been selected for syncing.</td> |
259 | + <td colspan="4">No images have been selected for syncing.</td> |
260 | </tr> |
261 | <tr data-ng-repeat="image in ubuntuCoreImages | orderBy:['-title', 'arch']"> |
262 | - <td> |
263 | - <i class="{$ image.icon $}"></i> |
264 | - </td> |
265 | - <td aria-label="Name">{$ image.title $}</td> |
266 | + <td aria-label="Name"><i class="{$ image.icon $}"></i>{$ image.title $}</td> |
267 | <td aria-label="Architecture">{$ image.arch $}</td> |
268 | <td aria-label="Size">{$ image.size $}</td> |
269 | <td aria-label="Status">{$ image.status $}</td> |
270 | @@ -227,7 +222,7 @@ |
271 | <table> |
272 | <thead> |
273 | <tr> |
274 | - <th colspan="2">Release</th> |
275 | + <th>Release</th> |
276 | <th>Architecture</th> |
277 | <th>Size</th> |
278 | <th>Status</th> |
279 | @@ -235,15 +230,13 @@ |
280 | </thead> |
281 | <tbody> |
282 | <tr data-ng-if="!otherImages.length"> |
283 | - <td colspan="5"> |
284 | + <td colspan="4"> |
285 | No images have been selected for syncing. |
286 | </td> |
287 | </tr> |
288 | <tr data-ng-repeat="image in otherImages | orderBy:['-title', 'arch']"> |
289 | - <td> |
290 | - <i class="{$ image.icon $}"></i> |
291 | - </td> |
292 | <td aria-label="Release"> |
293 | + <i class="{$ image.icon $}"></i> |
294 | {$ image.title $} |
295 | </td> |
296 | <td aria-label="Architecture">{$ image.arch $}</td> |
297 | diff --git a/src/maasserver/static/partials/cards/services.html b/src/maasserver/static/partials/cards/services.html |
298 | index 66c57f5..4a8bc8a 100644 |
299 | --- a/src/maasserver/static/partials/cards/services.html |
300 | +++ b/src/maasserver/static/partials/cards/services.html |
301 | @@ -1,6 +1,9 @@ |
302 | <header class="p-card__header"> |
303 | - <h2 class="p-heading--four">Services</h2> |
304 | - <h3 class="p-heading--three"><span data-maas-controller-status="node" data-maas-services="services" aria-label="Status"></span> <span data-maas-controller-status="node" data-maas-services="services" data-maas-text-only="true"></span></h3> |
305 | + <h2 class="p-heading--four">Services</h2> |
306 | + <div class="u-vertically-center"> |
307 | + <span data-maas-controller-status="node" data-maas-services="services" aria-label="Status" class="u-hide--small"></span> |
308 | + <h3 class="p-heading--three u-no-margin--top"><span data-maas-controller-status="node" data-maas-services="services" data-maas-text-only="true"></span></h3> |
309 | + </div> |
310 | </header> |
311 | <div> |
312 | <ul class="p-list-tree" aria-multiselectable="true" role="tablist"> |
313 | diff --git a/src/maasserver/static/partials/intro-user.html b/src/maasserver/static/partials/intro-user.html |
314 | index 160e343..3e0384e 100644 |
315 | --- a/src/maasserver/static/partials/intro-user.html |
316 | +++ b/src/maasserver/static/partials/intro-user.html |
317 | @@ -2,8 +2,7 @@ |
318 | <div class="row"> |
319 | <div class="p-card--highlighted col-12"> |
320 | <h2 class="p-card__title"> |
321 | - <i class="icon icon--large u-margin--right-tiny" |
322 | - data-ng-class="{'icon--success': canContinue(), 'p-icon--success-muted': !canContinue()}"></i> |
323 | + <i data-ng-class="{'p-icon--success': canContinue(), 'p-icon--success-muted': !canContinue()}"></i> |
324 | SSH keys for {$ user.username $} |
325 | </h2> |
326 | <div class="p-card__content"> |
327 | @@ -19,9 +18,9 @@ |
328 | MAAS has been successfully set up |
329 | </h2> |
330 | <div class="p-card__content"> |
331 | - <p class="u-margin--top"><i class="icon icon--success u-margin--right-small"></i>Once DHCP is enabled, set your machines to PXE boot and they will be automatically enlisted in the Nodes tab.</p> |
332 | - <p class="u-margin--top"><i class="icon icon--success u-margin--right-small"></i>Discovered MAC/IP pairs in your network will be listed on your dashboard and can be added to MAAS.</p> |
333 | - <p class="u-margin--top u-margin--bottom"><i class="icon icon--success u-margin--right-small"></i>The fabrics, VLANs and subnets in your network will be automatically added to MAAS in Networks.</p> |
334 | + <p class="u-margin--top"><i class="p-icon--success"></i>Once DHCP is enabled, set your machines to PXE boot and they will be automatically enlisted in the Nodes tab.</p> |
335 | + <p class="u-margin--top"><i class="p-icon--success"></i>Discovered MAC/IP pairs in your network will be listed on your dashboard and can be added to MAAS.</p> |
336 | + <p class="u-margin--top u-margin--bottom"><i class="p-icon--success"></i>The fabrics, VLANs and subnets in your network will be automatically added to MAAS in Networks.</p> |
337 | </div> |
338 | </div> |
339 | </div> |
340 | diff --git a/src/maasserver/static/partials/intro.html b/src/maasserver/static/partials/intro.html |
341 | index a481a5a..8a9b323 100644 |
342 | --- a/src/maasserver/static/partials/intro.html |
343 | +++ b/src/maasserver/static/partials/intro.html |
344 | @@ -3,8 +3,7 @@ |
345 | <div class="col-10"> |
346 | <div class="p-card--highlighted"> |
347 | <h2 class="p-card__title"> |
348 | - <i class="icon icon--large u-margin--right-tiny" |
349 | - data-ng-class="{ 'icon--success': !welcomeInError(), 'icon--error': welcomeInError() }"></i> |
350 | + <i data-ng-class="{ 'p-icon--success': !welcomeInError(), 'p-icon--error': welcomeInError() }"></i> |
351 | Welcome to MAAS |
352 | </h2> |
353 | <div class="p-card__content"> |
354 | diff --git a/src/maasserver/static/partials/machines-table.html b/src/maasserver/static/partials/machines-table.html |
355 | index d4bd159..a5adfd3 100644 |
356 | --- a/src/maasserver/static/partials/machines-table.html |
357 | +++ b/src/maasserver/static/partials/machines-table.html |
358 | @@ -52,7 +52,7 @@ |
359 | <a href="#/node/{$ node.system_id $}" class="extra-macs" data-ng-show="node.extra_macs.length">(+{$ node.extra_macs.length $})</a> |
360 | </td> |
361 | <td class="powerstate u-upper-case--first" aria-label="Power state"> |
362 | - <span data-ng-if="node.power_state != 'unknown'" class="icon icon--power-{$ node.power_state $} u-margin--right-tiny"></span> {$ node.power_state $} |
363 | + <span data-ng-if="node.power_state != 'unknown'" class="p-icon--power-{$ node.power_state $} u-margin--right-tiny"></span> {$ node.power_state $} |
364 | </td> |
365 | <td class="u-hide--small"> |
366 | <i data-ng-if="showSpinner(node)" class="p-icon--spinner u-animation--spin u-hide--small"></i> |
367 | @@ -66,28 +66,28 @@ |
368 | {$ getStatusText(node) $} |
369 | <span class="u-hide--medium u-hide--large"> |
370 | <i data-ng-if="showSpinner(node)" class="p-icon--spinner u-animation--spin"></i> |
371 | - <span class="p-tooltip p-tooltip--top-right"> |
372 | + <span class="p-tooltip p-tooltip--left"> |
373 | <i data-ng-if="showNodeStatus(node)" data-maas-script-status="script-status" data-script-status="node.other_test_status" aria-labelledby="{$ node.other_test_status_tooltip $}"></i> |
374 | <span class="p-tooltip__message" role="tooltip" id="other-status-tooltip-{$ node.fqdn $}">{$ node.other_test_status_tooltip $}</span> |
375 | </span> |
376 | - <span class="p-tooltip p-tooltip--top-right"> |
377 | + <span class="p-tooltip p-tooltip--left"> |
378 | <i data-ng-if="showFailedTestWarning(node)" class="p-icon--warning" aria-describedby="failed-test-tooltip-large-{$ node.fqdn $}"></i> |
379 | <span class="p-tooltip__message" role="tooltip" id="failed-test-tooltip-large-{$ node.fqdn $}">{$ node.other_test_status_tooltip $}</span> |
380 | </span> |
381 | </span> |
382 | </td> |
383 | <td aria-label="Owner"> {$ node.owner $}</td> |
384 | - <td class="u-align--right u-hide--small p-tooltip p-tooltip--top-right" aria-label="CPU"> |
385 | + <td class="u-align--right u-hide--small p-tooltip p-tooltip--left" aria-label="CPU"> |
386 | <span data-maas-script-status="script-status" data-script-status="node.cpu_test_status" data-ng-if="node.cpu_test_status !== 2" aria-describedby="node-cpu-tooltip-{$ node.fqdn $}"></span> |
387 | {$ node.cpu_count $} |
388 | <span class="p-tooltip__message" role="tooltip" id="node-cpu-tooltip-{$ node.fqdn $}">{$ node.cpu_test_status_tooltip $}</span> |
389 | </td> |
390 | - <td class="u-align--right u-hide--small p-tooltip p-tooltip--top-right" aria-label="Memory"> |
391 | + <td class="u-align--right u-hide--small p-tooltip p-tooltip--left" aria-label="Memory"> |
392 | <span data-maas-script-status="script-status" data-script-status="node.memory_test_status" data-ng-if="node.memory_test_status !== 2" aria-describedby="node-memory-tooltip-{$ node.fqdn $}"></span> |
393 | {$ node.memory $} |
394 | <span class="p-tooltip__message" role="tooltip" id="node-memory-tooltip-{$ node.fqdn $}">{$ node.memory_test_status_tooltip $}</span> |
395 | </td> |
396 | - <td class="u-align--right u-hide--small p-tooltip p-tooltip--top-right" aria-label="Disks"> |
397 | + <td class="u-align--right u-hide--small p-tooltip p-tooltip--left" aria-label="Disks"> |
398 | <span class="" data-maas-script-status="script-status" data-script-status="node.storage_test_status" data-ng-if="node.storage_test_status !== 2" aria-describedby="disk-count-tooltip-{$ node.fqdn $}"> |
399 | </span> |
400 | {$ node.physical_disk_count $} |
401 | diff --git a/src/maasserver/static/partials/networks-list.html b/src/maasserver/static/partials/networks-list.html |
402 | index c7ca14c..0efb77e 100644 |
403 | --- a/src/maasserver/static/partials/networks-list.html |
404 | +++ b/src/maasserver/static/partials/networks-list.html |
405 | @@ -190,7 +190,7 @@ |
406 | <tr data-ng-repeat="row in group.spaces.orphanVLANs"> |
407 | <td aria-label="Space"> |
408 | <a data-ng-if="$index === 0" href="#/space/{$ row.space.id $}">(undefined)</a> |
409 | - <span data-ng-if="$index === 0" class="icon icon--warning tooltip tooltip--right u-margin--left-small u-display--desktop" |
410 | + <span data-ng-if="$index === 0" class="p-icon--warning tooltip tooltip--right u-margin--left-small u-display--desktop" |
411 | aria-label="MAAS integrations require a space in order to determine the purpose of a network.
Define a space for each subnet by selecting the space on the VLAN details page.
If an approprate space does not exist, one may be created on this page."></span> |
412 | </td> |
413 | <td> |
414 | diff --git a/src/maasserver/static/partials/node-details.html b/src/maasserver/static/partials/node-details.html |
415 | index c7b7ca3..c8014de 100755 |
416 | --- a/src/maasserver/static/partials/node-details.html |
417 | +++ b/src/maasserver/static/partials/node-details.html |
418 | @@ -274,7 +274,7 @@ |
419 | </ul> |
420 | </nav> |
421 | </header> |
422 | - |
423 | + |
424 | <section class="p-strip is-shallow" data-ng-if="section.area === 'summary'"> |
425 | <div class="row"> |
426 | <div data-ng-if="isSuperUser()"> |
427 | @@ -288,7 +288,7 @@ |
428 | data-ng-if="!isController && !isDevice && hasInvalidArchitecture() && isRackControllerConnected() && hasUsableArchitectures()"> |
429 | <p class="p-notification__response"> |
430 | <span class="p-notification__status">Error:</span> This machine currently has an invalid architecture. Update the architecture of this machine to make it deployable. |
431 | - </p |
432 | + </p> |
433 | </div> |
434 | <div class="p-notification--negative" |
435 | data-ng-if="!isController && !isDevice && hasInvalidArchitecture() && isRackControllerConnected() && !hasUsableArchitectures()"> |
436 | @@ -594,28 +594,28 @@ |
437 | <ul class="p-list-tree" aria-multiselectable="true" role="tablist"> |
438 | <li class="p-list-tree__item"> |
439 | <span> |
440 | - <span class="icon icon--{$ getServiceClass(services.regiond) $}"></span> |
441 | + <span class="p-icon--{$ getServiceClass(services.regiond) $}"></span> |
442 | regiond |
443 | <span data-ng-if="services.regiond.status_info"> — {$ services.regiond.status_info $}</span> |
444 | </span> |
445 | </li> |
446 | <li class="p-list-tree__item"> |
447 | <span> |
448 | - <span class="icon icon--{$ getServiceClass(services.bind9) $}"></span> |
449 | + <span class="p-icon--{$ getServiceClass(services.bind9) $}"></span> |
450 | bind9 |
451 | <span data-ng-if="services.bind9.status_info"> — {$ services.bind9.status_info $}</span> |
452 | </span> |
453 | </li> |
454 | <li class="p-list-tree__item"> |
455 | <span> |
456 | - <span class="icon icon--{$ getServiceClass(services.proxy) $}"></span> |
457 | + <span class="p-icon--{$ getServiceClass(services.proxy) $}"></span> |
458 | proxy |
459 | <span data-ng-if="services.proxy.status_info"> — {$ services.proxy.status_info $}</span> |
460 | </span> |
461 | </li> |
462 | <li class="p-list-tree__item" data-ng-if="services.ntp_region"> |
463 | <span> |
464 | - <span class="icon icon--{$ getServiceClass(services.ntp_region) $}"></span> |
465 | + <span class="p-icon--{$ getServiceClass(services.ntp_region) $}"></span> |
466 | ntp |
467 | <span data-ng-if="services.ntp_region.status_info"> — {$ services.ntp_region.status_info $}</span> |
468 | </span> |
469 | @@ -629,21 +629,21 @@ |
470 | <ul class="p-list-tree" aria-multiselectable="true" role="tablist"> |
471 | <li class="p-list-tree__item p-list-tree__item--group"> |
472 | <span> |
473 | - <span class="icon icon--{$ getServiceClass(services.rackd) $}"></span> |
474 | + <span class="p-icon--{$ getServiceClass(services.rackd) $}"></span> |
475 | rackd |
476 | <span data-ng-if="services.rackd.status_info"> — {$ services.rackd.status_info $}</span> |
477 | </span> |
478 | <ul class="p-list-tree" role="tabpanel" aria-hidden="true"> |
479 | <li class="p-list-tree__item"> |
480 | <span> |
481 | - <span class="icon icon--{$ getServiceClass(services.http) $}"></span> |
482 | + <span class="p-icon--{$ getServiceClass(services.http) $}"></span> |
483 | http |
484 | <span data-ng-if="services.http.status_info"> — {$ services.http.status_info $}</span> |
485 | </span> |
486 | </li> |
487 | <li class="p-list-tree__item"> |
488 | <span> |
489 | - <span class="icon icon--{$ getServiceClass(services.tftp) $}"></span> |
490 | + <span class="p-icon--{$ getServiceClass(services.tftp) $}"></span> |
491 | tftp |
492 | <span data-ng-if="services.tftp.status_info"> — {$ services.tftp.status_info $}</span> |
493 | </span> |
494 | @@ -652,28 +652,28 @@ |
495 | </li> |
496 | <li class="p-list-tree__item"> |
497 | <span> |
498 | - <span class="icon icon--{$ getServiceClass(services.dhcpd) $}"></span> |
499 | + <span class="p-icon--{$ getServiceClass(services.dhcpd) $}"></span> |
500 | dhcpd |
501 | <span data-ng-if="services.dhcpd.status_info"> — {$ services.dhcpd.status_info $}</span> |
502 | </span> |
503 | </li> |
504 | <li class="p-list-tree__item"> |
505 | <span> |
506 | - <span class="icon icon--{$ getServiceClass(services.dhcpd6) $}"></span> |
507 | + <span class="p-icon--{$ getServiceClass(services.dhcpd6) $}"></span> |
508 | dhcpd6 |
509 | <span data-ng-if="services.dhcpd6.status_info"> — {$ services.dhcpd6.status_info $}</span> |
510 | </span> |
511 | </li> |
512 | <li class="p-list-tree__item"> |
513 | <span> |
514 | - <span class="icon icon--{$ getServiceClass(services.tgt) $}"></span> |
515 | + <span class="p-icon--{$ getServiceClass(services.tgt) $}"></span> |
516 | tgt |
517 | <span data-ng-if="services.tgt.status_info"> — {$ services.tgt.status_info $}</span> |
518 | </span> |
519 | </li> |
520 | <li class="p-list-tree__item" data-ng-if="services.ntp_rack"> |
521 | <span> |
522 | - <span class="icon icon--{$ getServiceClass(services.ntp_rack) $}"></span> |
523 | + <span class="p-icon--{$ getServiceClass(services.ntp_rack) $}"></span> |
524 | ntp |
525 | <span data-ng-if="services.ntp_rack.status_info"> — {$ services.ntp_rack.status_info $}</span> |
526 | </span> |
527 | @@ -869,7 +869,7 @@ |
528 | </div> |
529 | </td> |
530 | <td class="p-table-expanding__panel" data-ng-if="isShowingMembers(interface)"> |
531 | - <div class="row" data-ng-class="{ 'is-active': isShowingMembers(interface) }" |
532 | + <div class="row" data-ng-class="{ 'is-active': isShowingMembers(interface) }" |
533 | data-ng-repeat="member in interface.members" |
534 | data-ng-show="isShowingMembers(interface)"> |
535 | <div class="col-1"></div> |
536 | @@ -1395,7 +1395,7 @@ |
537 | </select> |
538 | </div> |
539 | </div> |
540 | - <div class="p-form__group p-form-validation" data-ng-if="newInterface.mode == 'static'" |
541 | + <div class="p-form__group p-form-validation" data-ng-if="newInterface.mode == 'static'" |
542 | data-ng-class="{ 'is-error': isIPAddressInvalid(newInterface) }"> |
543 | <label for="ip-address" class="p-form__label">IP address</label> |
544 | <div class="p-form__control"> |
545 | @@ -1415,7 +1415,7 @@ |
546 | data-ng-class="{ 'is-error': isMACAddressInvalid(newInterface.mac_address, true) }"> |
547 | <label for="mac" class="p-form__label">MAC address</label> |
548 | <div class="p-form__control"> |
549 | - <input name="mac" type="text" |
550 | + <input name="mac" type="text" |
551 | class="p-form-validation__input" |
552 | placeholder="00:00:00:00:00:00" |
553 | data-ng-model="newInterface.mac_address" |
554 | @@ -1558,7 +1558,7 @@ |
555 | <td class="col-2" aria-label="Mount options">{$ filesystem.mount_options $}</td> |
556 | <td class="col-2 u-align--right"> |
557 | <div class="p-contextual-menu" toggle-ctrl data-ng-if="!isAllStorageDisabled()"> |
558 | - <button class="p-contextual-menu__toggle" aria-controls="#{$ item.name $}-menu" |
559 | + <button class="p-contextual-menu__toggle" aria-controls="#{$ item.name $}-menu" |
560 | data-ng-click="toggleMenu()" aria-haspopup="true">View actions</button> |
561 | <div class="p-contextual-menu__dropdown" role="menu" data-ng-show="isToggled" id="{$ item.name $}-menu"> |
562 | <a href="" class="p-contextual-menu__link" |
563 | @@ -1608,7 +1608,7 @@ |
564 | <tr class="is-active" data-ng-if="dropdown" data-ng-switch="dropdown"> |
565 | <!-- Adding a new TMPFS or RAMFPS file system --> |
566 | <td class="p-table-expanding__panel" data-ng-controller="NodeAddSpecialFilesystemController" data-ng-switch-when="special"> |
567 | - <div class="row" data-ng-if="windowWidth <= 768"> |
568 | + <div class="row" data-ng-if="windowWidth <= 768"> |
569 | <div class="col-8"> |
570 | <h2 data-ng-click="cancel()">Adding filesystem</h2> |
571 | </div> |
572 | @@ -1831,7 +1831,7 @@ |
573 | <td class="col-2 u-align--right"> |
574 | <div class="p-contextual-menu" toggle-ctrl |
575 | data-ng-if="canAddLogicalVolume(item) || canAddPartition(item) || canEdit(item) || canDelete(item)"> |
576 | - <button class="p-contextual-menu__toggle" aria-controls="#{$ item.name $}-menu" |
577 | + <button class="p-contextual-menu__toggle" aria-controls="#{$ item.name $}-menu" |
578 | data-ng-click="toggleMenu()" aria-haspopup="true">View actions</button> |
579 | <div class="p-contextual-menu__dropdown" role="menu" data-ng-show="isToggled" id="{$ item.name $}-menu"> |
580 | <a href="" class="p-contextual-menu__link" |
581 | @@ -1853,7 +1853,7 @@ |
582 | </div> |
583 | </div> |
584 | </td> |
585 | - <td class="p-table-expanding__panel" |
586 | + <td class="p-table-expanding__panel" |
587 | data-ng-if="(availableMode === 'edit' || availableMode === 'format-mount' || availableMode === 'partition' || availableMode === 'logical-volume' || availableMode === 'delete') && item.$selected"> |
588 | <div class="row" data-ng-if="windowWidth <= 768"> |
589 | <div class="col-8"> |
590 | @@ -2012,7 +2012,7 @@ |
591 | <span>Partition</span> |
592 | </div> |
593 | </div> |
594 | - <div class="p-form__group p-form-validation" |
595 | + <div class="p-form__group p-form-validation" |
596 | data-ng-class="{ 'is-error': isAddPartitionSizeInvalid(item) }"> |
597 | <label class="p-form__label" for="size">Size</label> |
598 | <div class="p-form__controls"> |
599 | @@ -2629,18 +2629,14 @@ |
600 | <table data-ng-if="node.events.length"> |
601 | <thead> |
602 | <tr> |
603 | - <th class="col-1"></th> |
604 | - <th class="col-9">Event</th> |
605 | + <th class="col-10">Event</th> |
606 | <th class="col-2">Time</th> |
607 | </tr> |
608 | </thead> |
609 | <tbody> |
610 | <tr |
611 | data-ng-repeat="event in node.events | orderByDate:'created':'id' | limitTo:events.limit"> |
612 | - <td class="col-1" aria-label="{$ event.type.level $}"> |
613 | - <span class="p-icon--{$ event.type.level $}"></span> |
614 | - </td> |
615 | - <td class="col-9" aria-label="Event">{$ getEventText(event) $}</td> |
616 | + <td class="col-10" aria-label="Event"><span class="p-icon--{$ event.type.level $}"></span>{$ getEventText(event) $}</td> |
617 | <td class="col-2" aria-label="Created">{$ event.created $}</td> |
618 | </tr> |
619 | </tbody> |
620 | diff --git a/src/maasserver/static/partials/node-events.html b/src/maasserver/static/partials/node-events.html |
621 | index 636c59d..f355177 100644 |
622 | --- a/src/maasserver/static/partials/node-events.html |
623 | +++ b/src/maasserver/static/partials/node-events.html |
624 | @@ -43,7 +43,7 @@ |
625 | <tr |
626 | data-ng-repeat="event in events | filter:search | orderByDate:'created':'id' track by event.id"> |
627 | <td class="table-col--1 u-padding--right-none u-padding--left-none"> |
628 | - <span class="icon icon--{$ event.type.level $}"></span> |
629 | + <span class="p-icon--{$ event.type.level $}"></span> |
630 | </td> |
631 | <td class="table-col--79"> |
632 | {$ getEventText(event) $} |
633 | diff --git a/src/maasserver/static/partials/pod-details.html b/src/maasserver/static/partials/pod-details.html |
634 | index 9fa43e1..facbbff 100644 |
635 | --- a/src/maasserver/static/partials/pod-details.html |
636 | +++ b/src/maasserver/static/partials/pod-details.html |
637 | @@ -137,7 +137,7 @@ |
638 | </form> |
639 | </div> |
640 | </div> |
641 | - <div class="p-strip is-shallow u-no-padding--bottom" media-query="min-width: 769px" offset="89" data-ng-class="{ 'u-hide': action.option }"> |
642 | + <div class="p-strip is-shallow u-no-padding--bottom" media-query="min-width: 769px" offset="89" data-ng-class="{ 'u-hide': action.option }"> |
643 | <nav class="p-tabs"> |
644 | <ul class="p-tabs__list" role="tablist"> |
645 | <li class="p-tabs__item" role="presentation"> |
646 | @@ -194,7 +194,7 @@ |
647 | |
648 | <div class="col-9" data-ng-if="!pod.composed_machines_count"> |
649 | <div class="u-align--center u-vertical--align u-align--center"> |
650 | - <i class="icon icon--compose-machine icon--huge" style="width: 128px; height: 128px;"></i> |
651 | + <i class="p-icon--compose-machine" style="width: 128px; height: 128px;"></i> |
652 | <h3>You have not composed any machines yet.</h3> |
653 | <button class="p-button--positive is-inline" data-ng-if="canCompose()" data-ng-click="composeMachine()">Compose machine</button> |
654 | </div> |
655 | diff --git a/src/maasserver/static/partials/script-results-list.html b/src/maasserver/static/partials/script-results-list.html |
656 | index 9f2fc46..87323d3 100644 |
657 | --- a/src/maasserver/static/partials/script-results-list.html |
658 | +++ b/src/maasserver/static/partials/script-results-list.html |
659 | @@ -13,7 +13,6 @@ |
660 | <table class="p-table-expanding"> |
661 | <thead> |
662 | <tr> |
663 | - <th class="col-1"></th> |
664 | <th class="col-3">Name</th> |
665 | <th class="col-2">Tags</th> |
666 | <th class="col-1">Runtime</th> |
667 | @@ -24,10 +23,8 @@ |
668 | </thead> |
669 | <tbody> |
670 | <tr data-ng-repeat="result in results" data-ng-class="{'is-active': result.showing_results || result.showing_history}"> |
671 | - <td class="col-1" aria-label="Status"> |
672 | - <span data-maas-script-status="script-status" data-script-status="result.status"></span> |
673 | - </td> |
674 | <td class="col-3" data-ng-click="result.showing_results = !result.showing_results" aria-label="Name"> |
675 | + <span data-maas-script-status="script-status" data-script-status="result.status"></span> |
676 | {$ result.name $} |
677 | <button class="p-button--base u-float--right" data-ng-class="{'p-icon--chevron': !result.showing_results, 'p-icon--close': result.showing_results}" data-ng-if="!result.showing_history"></button> |
678 | </td> |
679 | diff --git a/src/maasserver/static/partials/settings.html b/src/maasserver/static/partials/settings.html |
680 | index 0339ac2..f700394 100644 |
681 | --- a/src/maasserver/static/partials/settings.html |
682 | +++ b/src/maasserver/static/partials/settings.html |
683 | @@ -463,7 +463,7 @@ |
684 | </div> |
685 | <div class="is-active"> |
686 | <div class=" u-float--left"> |
687 | - <p><span class="icon icon--warning"></span> Are you sure you want to remove this repository?</p> |
688 | + <p><span class="p-icon--warning"></span> Are you sure you want to remove this repository?</p> |
689 | </div> |
690 | <div class=" u-float--right"> |
691 | <button class="button--base" data-ng-click="repositoryExitRemove()">Cancel</button> |
692 | diff --git a/src/maasserver/static/partials/switches-table.html b/src/maasserver/static/partials/switches-table.html |
693 | index cefe8f3..0b5ee74 100644 |
694 | --- a/src/maasserver/static/partials/switches-table.html |
695 | +++ b/src/maasserver/static/partials/switches-table.html |
696 | @@ -49,10 +49,10 @@ |
697 | <a href="#/node/{$ node.link_type $}/{$ node.system_id $}" class="extra-macs" data-ng-show="node.extra_macs.length">(+{$ node.extra_macs.length $})</a> |
698 | </td> |
699 | <td class="powerstate u-upper-case--first" aria-label="Power state"> |
700 | - <span title="{$ node.power_state $}" data-ng-if="node.power_state != 'unknown'" class="icon icon--power-{$ node.power_state $} u-margin--right-tiny"></span> {$ node.power_state $} |
701 | + <span title="{$ node.power_state $}" data-ng-if="node.power_state != 'unknown'" class="p-icon--power-{$ node.power_state $}"></span> {$ node.power_state $} |
702 | </td> |
703 | <td class="table-col--3 u-display--desktop"><i data-ng-if="showSpinner(node)" class="p-icon--spinner u-animation--spin u-display--desktop"></i></td> |
704 | - <td class="status u-text--truncate" aria-label="Status">{$ getStatusText(node) $} <span class="u-display--mobile"><i data-ng-if="showSpinner(node)" class="p-icon--spinner u-animation--spin u-margin--left-tiny"></i></span></td> |
705 | + <td class="status u-text--truncate" aria-label="Status">{$ getStatusText(node) $} <span class="u-display--mobile"><i data-ng-if="showSpinner(node)" class="p-icon--spinner u-animation--spin"></i></span></td> |
706 | <td class="table-col--10" aria-label="Owner">{$ node.owner $}</td> |
707 | <td class="u-align--right u-display--desktop" aria-label="Model">{$ node.metadata['physical-mfg-name'] + ' ' + node.metadata['physical-model-name']$}</td> |
708 | <td class="u-align--right u-display--desktop" aria-label="Serial">{$ node.metadata['physical-serial-num'] $}</td> |
709 | diff --git a/src/maasserver/static/partials/vlan-details.html b/src/maasserver/static/partials/vlan-details.html |
710 | index a8f7cc0..b2b7dee 100644 |
711 | --- a/src/maasserver/static/partials/vlan-details.html |
712 | +++ b/src/maasserver/static/partials/vlan-details.html |
713 | @@ -260,7 +260,7 @@ |
714 | <i class="p-icon--information">Help:</i> |
715 | <span class="p-tooltip__message" role="tooltip">A rack controller controls hosts and images and runs network services
like DHCP for connected VLANs.</span> |
716 | </span> |
717 | - <span class="icon icon--information tooltip" aria-label="A rack controller controls hosts and images and runs network services
like DHCP for connected VLANs."></span> |
718 | + <span class="p-icon--information tooltip" aria-label="A rack controller controls hosts and images and runs network services
like DHCP for connected VLANs."></span> |
719 | </dt> |
720 | <dd> |
721 | <span data-ng-repeat="rack in vlanDetails.relatedControllers"> |
722 | diff --git a/src/maasserver/static/scss/_patterns_icons.scss b/src/maasserver/static/scss/_patterns_icons.scss |
723 | index d09e5f1..aa5a8e9 100644 |
724 | --- a/src/maasserver/static/scss/_patterns_icons.scss |
725 | +++ b/src/maasserver/static/scss/_patterns_icons.scss |
726 | @@ -1,20 +1,14 @@ |
727 | -// MAAS Status icon colours |
728 | -$status-failed: $color-negative; |
729 | -$status-in-progress: $color-information; |
730 | -$status-queued: $color-mid-dark; |
731 | -$status-succeeded: $color-positive; |
732 | -$status-waiting: $color-caution; |
733 | - |
734 | @mixin maas-icon-edit($color) { |
735 | - background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg width='22' height='22' viewBox='0 0 22 22' xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eedit%3c/title%3e%3cg fill='#{$color}' fill-rule='evenodd'%3e%3cpath d='M17 15h5v1h-5zm-3 3h8v1h-8zm-3 3h11v1H11zm5.75-21L3.47 13.517S.956 17.465 0 21.987v.004l.002.004V22c4.532-.955 8.48-3.472 8.48-3.472L22 5.25 16.75 0zM4.51 14.555L7.454 17.5c-.2.114-2.99 2.064-5.544 2.602V20.093l-.002-.003c.537-2.546 2.485-5.334 2.602-5.537v.002z'/%3e%3cpath d='M2.234 18l1.85 1.85L1 21'/%3e%3c/g%3e%3c/svg%3e"); |
736 | + background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg width='22' height='22' viewBox='0 0 22 22' xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eedit%3c/title%3e%3cg fill='" + rgba($color, 1) + "' fill-rule='evenodd'%3e%3cpath d='M17 15h5v1h-5zm-3 3h8v1h-8zm-3 3h11v1H11zm5.75-21L3.47 13.517S.956 17.465 0 21.987v.004l.002.004V22c4.532-.955 8.48-3.472 8.48-3.472L22 5.25 16.75 0zM4.51 14.555L7.454 17.5c-.2.114-2.99 2.064-5.544 2.602V20.093l-.002-.003c.537-2.546 2.485-5.334 2.602-5.537v.002z'/%3e%3cpath d='M2.234 18l1.85 1.85L1 21'/%3e%3c/g%3e%3c/svg%3e"); |
737 | } |
738 | |
739 | @mixin maas-icon-power-on($color) { |
740 | - background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2215%22%20width%3D%2214%22%3E%3Cpath%20d%3D%22M11.04%202.323l-.324%202.268a5.017%205.017%200%200%201%201.352%203.426c0%202.787-2.274%205.056-5.068%205.056s-5.067-2.269-5.067-5.056a5.02%205.02%200%200%201%201.351-3.426L2.96%202.323A6.935%206.935%200%200%200%200%208.017C0%2011.868%203.14%2015%207%2015s7-3.132%207-6.983a6.933%206.933%200%200%200-2.96-5.694zM6%200h2v7H6V0z%22%20fill%3D%22%230E8420%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E"); |
741 | + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2215%22%20width%3D%2214%22%3E%3Cpath%20d%3D%22M11.04%202.323l-.324%202.268a5.017%205.017%200%200%201%201.352%203.426c0%202.787-2.274%205.056-5.068%205.056s-5.067-2.269-5.067-5.056a5.02%205.02%200%200%201%201.351-3.426L2.96%202.323A6.935%206.935%200%200%200%200%208.017C0%2011.868%203.14%2015%207%2015s7-3.132%207-6.983a6.933%206.933%200%200%200-2.96-5.694zM6%200h2v7H6V0z%22%20fill%3D%22" + encodecolor($color) + "%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E"); |
742 | } |
743 | |
744 | @mixin maas-icons { |
745 | .p-icon { |
746 | + padding-right: $sp-small; |
747 | |
748 | &--edit { |
749 | @extend %icon; |
750 | @@ -27,37 +21,41 @@ $status-waiting: $color-caution; |
751 | |
752 | &--status-failed { |
753 | @extend %icon; |
754 | - background: url('data:image/svg+xml;utf8,%3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="' + rgba($status-failed, 1) + '" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="' + rgba($status-failed, 1) + '" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E'); |
755 | + background: url('data:image/svg+xml;utf8,%3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="' + encodecolor($color-negative) + '" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="' + encodecolor($color-negative) + '" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E'); |
756 | } |
757 | |
758 | &--status-in-progress { |
759 | @extend %icon; |
760 | - background: url('data:image/svg+xml;utf8, %3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="' + rgba($status-in-progress, 1) +'" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="' + rgba($status-in-progress, 1) +'" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E'); |
761 | + background: url('data:image/svg+xml;utf8, %3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="' + encodecolor($color-information) +'" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="' + encodecolor($color-information) +'" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E'); |
762 | } |
763 | |
764 | &--status-queued { |
765 | @extend %icon; |
766 | - background: url('data:image/svg+xml;utf8, %3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="' + rgba($status-queued, 1) + '" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="' + rgba($status-queued, 1) + '" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E'); |
767 | + background: url('data:image/svg+xml;utf8, %3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="' + encodecolor($color-mid-dark) + '" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="' + encodecolor($color-mid-dark) + '" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E'); |
768 | } |
769 | |
770 | &--status-succeeded { |
771 | @extend %icon; |
772 | - background: url('data:image/svg+xml;utf8, %3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="' + rgba($status-succeeded, 1) + '" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="' + rgba($status-succeeded, 1) + '" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E'); |
773 | + background: url('data:image/svg+xml;utf8, %3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="' + encodecolor($color-positive) + '" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="' + encodecolor($color-positive) + '" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E'); |
774 | } |
775 | |
776 | &--status-waiting { |
777 | @extend %icon; |
778 | - background: url('data:image/svg+xml;utf8, %3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="' + rgba($status-waiting, 1) + '" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="' + rgba($status-waiting, 1) + '" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E'); |
779 | + background: url('data:image/svg+xml;utf8, %3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="' + encodecolor($color-caution) + '" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="' + encodecolor($color-caution) + '" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E'); |
780 | + } |
781 | + |
782 | + &--timed-out { |
783 | + @extend %icon; |
784 | + background-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8' standalone='no'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' height='16px' width='16px' version='1.1' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 16 16'%3E%3Ctitle%3Etimed out%3C/title%3E%3Cg id='Page-1' fill-rule='evenodd' fill='none'%3E%3Cg id='smoke-testing-status' transform='translate%28-62 -206%29'%3E%3Cg id='timed-out' transform='translate%2850 191%29'%3E%3Cg transform='translate%2812 15%29'%3E%3Crect id='rect4970' y='0.00002' x='0' height='16' width='16'/%3E%3Ccircle id='circle4972' stroke-width='1.5' cy='8' stroke='%23E95420' cx='8' r='7.25'/%3E%3Cpolyline id='path839' stroke='%23E95420' stroke-width='2' points='11.8 11.8 7.9999 8 7.9999 3'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E%0A"); |
785 | } |
786 | |
787 | &--success-muted { |
788 | @extend %icon; |
789 | - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17' viewBox='0 0 17 17'%3E%3Cg transform='translate(1 1)' fill='none' fill-rule='evenodd'%3E%3Ccircle stroke='" + rgba($color-mid-light, 1) + "' stroke-width='1.5' fill='" + rgba($color-mid-light, 1) + "' cx='7.25001' cy='7.25001' r='7.25001'/%3E%3Cpath fill='%23fff' d='M11.0503 4.17345l-.0659.0577-4.73475 4.14722-2.77557-2.38094-.83906.94888 3.61532 3.80373L11.75 4.96278l-.6997-.7893'/%3E%3C/g%3E%3C/svg%3E"); |
790 | + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17' viewBox='0 0 17 17'%3E%3Cg transform='translate(1 1)' fill='none' fill-rule='evenodd'%3E%3Ccircle stroke='" + encodecolor($color-mid-light) + "' stroke-width='1.5' fill='" + encodecolor($color-mid-light) + "' cx='7.25001' cy='7.25001' r='7.25001'/%3E%3Cpath fill='%23fff' d='M11.0503 4.17345l-.0659.0577-4.73475 4.14722-2.77557-2.38094-.83906.94888 3.61532 3.80373L11.75 4.96278l-.6997-.7893'/%3E%3C/g%3E%3C/svg%3E"); |
791 | } |
792 | } |
793 | |
794 | - .p-icon--power-error, |
795 | - .icon--power-error { |
796 | + .p-icon--power-error { |
797 | @extend .p-icon--error; |
798 | } |
799 | |
800 | @@ -66,7 +64,23 @@ $status-waiting: $color-caution; |
801 | @include maas-icon-power-on(rgba($color-positive, .999999)); |
802 | } |
803 | |
804 | - .icon--pass { |
805 | + .p-icon--power-off { |
806 | + @extend %icon; |
807 | + @include maas-icon-power-on(rgba($color-mid-light, .999999)); |
808 | + } |
809 | + |
810 | + .p-icon--pass { |
811 | @extend .p-icon--success; |
812 | } |
813 | + |
814 | + .p-icon--info { |
815 | + @extend .p-icon--information; |
816 | + } |
817 | + |
818 | + [class^="p-icon"] { |
819 | + margin-right: $sp-x-small; |
820 | + } |
821 | } |
822 | + |
823 | + |
824 | +//TODO: do something about p-icon--none |
825 | diff --git a/src/maasserver/static/scss/_utils.scss b/src/maasserver/static/scss/_utils.scss |
826 | new file mode 100644 |
827 | index 0000000..a887ebf |
828 | --- /dev/null |
829 | +++ b/src/maasserver/static/scss/_utils.scss |
830 | @@ -0,0 +1,9 @@ |
831 | +//does not work with colors containing alpha |
832 | +@function encodecolor($string) { |
833 | + @if type-of($string) == 'color' { |
834 | + $hex: str-slice(ie-hex-str($string), 4); |
835 | + $string:unquote("#{$hex}"); |
836 | + } |
837 | + $string: '%23' + $string; |
838 | + @return $string; |
839 | +} |
840 | diff --git a/src/maasserver/static/scss/build.scss b/src/maasserver/static/scss/build.scss |
841 | index 832c8d5..c72ec45 100644 |
842 | --- a/src/maasserver/static/scss/build.scss |
843 | +++ b/src/maasserver/static/scss/build.scss |
844 | @@ -1,5 +1,6 @@ |
845 | // Import MAAS-specific Vanilla configuration |
846 | @import 'settings'; |
847 | +@import 'utils'; |
848 | |
849 | // Import Vanilla framework |
850 | @import '../../../../include/nodejs/node_modules/vanilla-framework/scss/vanilla'; |
851 | diff --git a/src/maasserver/templates/maasserver/zone_list.html b/src/maasserver/templates/maasserver/zone_list.html |
852 | index 4473d65..fc9f081 100755 |
853 | --- a/src/maasserver/templates/maasserver/zone_list.html |
854 | +++ b/src/maasserver/templates/maasserver/zone_list.html |
855 | @@ -7,7 +7,7 @@ |
856 | |
857 | {% block content %} |
858 | <div id="zones"> |
859 | - <h2>Physical zones <span class="icon icon--help tooltip tooltip--right" |
860 | + <h2>Physical zones <span class="p-icon--help tooltip tooltip--right" |
861 | aria-label="A representation of a grouping of nodes, typically by physical location."> |
862 | </span></h2> |
863 | <table> |
864 | @@ -36,8 +36,8 @@ |
865 | {% if user.is_superuser %} |
866 | <td class="u-align--right table--mobile-controls"> |
867 | {% if not zone_item.is_default %} |
868 | - <a href="{% url 'zone-edit' zone_item.name %}" title="Edit zone {{ zone_item.name }}" class="icon icon--edit u-margin--right-small">edit</a> |
869 | - <a title="Delete zone {{ zone_item.name }}" class="icon icon--delete" href="{% url 'zone-del' zone_item.name %}">delete</a> |
870 | + <a href="{% url 'zone-edit' zone_item.name %}" title="Edit zone {{ zone_item.name }}" class="p-icon--edit u-margin--right-small">edit</a> |
871 | + <a title="Delete zone {{ zone_item.name }}" class="p-icon--delete" href="{% url 'zone-del' zone_item.name %}">delete</a> |
872 | <form method="POST" action="{% url 'zone-del' zone_item.name %}"> |
873 | {% csrf_token %} |
874 | <input type="hidden" name="name" value="{{ zone_item.name }}" /> |
Good stuff, two very small comments.