Skip to content

Commit 1f95b09

Browse files
Use symbols for build status (jenkinsci#8705)
* Init * Rename ID * Fix icon position * Fix app bar build status icon being incorrect * Address missed icons --------- Co-authored-by: Alexander Brandes <[email protected]>
1 parent f9f542b commit 1f95b09

30 files changed

+157
-103
lines changed

.editorconfig

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
root = true
22

3-
[*.{js, scss, css, hbs}]
3+
[*.{js, scss, css, hbs, svg}]
44
indent_style = space
55
indent_size = 2
66
trim_trailing_whitespace = true

core/src/main/resources/hudson/model/AbstractBuild/index.jelly

+2-2
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ THE SOFTWARE.
7676
<j:choose>
7777
<j:when test="${dep.from!=null}">
7878
<a href="${rootURL}/${dep.from.url}" class="model-link inside">
79-
<l:icon class="${dep.from.buildStatusIconClassName} icon-sm" alt="${dep.from.iconColor.description}"/>${dep.from.displayName}</a>
79+
<l:icon src="symbol-status-${dep.from.iconColor.iconName}" class="icon-sm" alt="${dep.from.iconColor.description}"/>${dep.from.displayName}</a>
8080
</j:when>
8181
<j:otherwise>
8282
?
@@ -86,7 +86,7 @@ THE SOFTWARE.
8686
&#x2192; <!-- right arrow -->
8787

8888
<a href="${rootURL}/${dep.to.url}" class="model-link inside">
89-
<l:icon class="${dep.to.buildStatusIconClassName} icon-sm" alt="${dep.to.iconColor.description}" />${dep.to.displayName}</a>
89+
<l:icon src="symbol-status-${dep.to.iconColor.iconName}" class="icon-sm" alt="${dep.to.iconColor.description}" />${dep.to.displayName}</a>
9090

9191
(<a href="${rootURL}/${dep.project.url}changes?from=${dep.fromId}&amp;to=${dep.toId}">${%detail}</a>)
9292
</li>

core/src/main/resources/hudson/model/Job/buildTimeTrend.jelly

+8
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@ THE SOFTWARE.
3131
<l:breadcrumb title="${%Build Time Trend}" />
3232
<st:adjunct includes="hudson.model.Job.buildTimeTrend_resources" />
3333
<l:main-panel>
34+
<template id="jenkins-build-status-icons">
35+
<l:icon src="symbol-status-blue" id="blue" />
36+
<l:icon src="symbol-status-yellow" id="yellow" />
37+
<l:icon src="symbol-status-red" id="red" />
38+
<l:icon src="symbol-status-nobuilt" id="nobuilt" />
39+
<l:icon src="symbol-status-aborted" id="aborted" />
40+
<l:icon src="symbol-status-disabled" id="disabled" />
41+
</template>
3442
<h1>${%Build Time Trend}</h1>
3543
<div align="center">
3644
<img class="build-time-graph" src="buildTimeGraph/png" width="500" height="400" lazymap="buildTimeGraph/map" alt="[${%Build time graph}]" />

core/src/main/resources/hudson/model/Job/buildTimeTrend_resources.js

+5-70
Original file line numberDiff line numberDiff line change
@@ -67,76 +67,11 @@ window.buildTimeTrend_displayBuilds = function (data) {
6767
/**
6868
* Generate SVG Icon
6969
*/
70-
function generateSVGIcon(iconName, iconSizeClass) {
71-
const imagesURL = document.head.getAttribute("data-imagesurl");
72-
73-
const isInProgress = iconName.endsWith("anime");
74-
let buildStatus = "never-built";
75-
switch (iconName) {
76-
case "red":
77-
case "red-anime":
78-
buildStatus = "last-failed";
79-
break;
80-
case "yellow":
81-
case "yellow-anime":
82-
buildStatus = "last-unstable";
83-
break;
84-
case "blue":
85-
case "blue-anime":
86-
buildStatus = "last-successful";
87-
break;
88-
case "grey":
89-
case "grey-anime":
90-
case "disabled":
91-
case "disabled-anime":
92-
buildStatus = "last-disabled";
93-
break;
94-
case "aborted":
95-
case "aborted-anime":
96-
buildStatus = "last-aborted";
97-
break;
98-
case "nobuilt":
99-
case "nobuilt-anime":
100-
buildStatus = "never-built";
101-
break;
102-
}
70+
function generateSVGIcon(iconName) {
71+
const icons = document.querySelector("#jenkins-build-status-icons");
72+
iconName = iconName.replace("-anime", "");
10373

104-
const svg1 = document.createElementNS("http://www.w3.org/2000/svg", "svg");
105-
svg1.setAttribute("class", "svg-icon");
106-
svg1.setAttribute("viewBox", "0 0 24 24");
107-
const use1 = document.createElementNS("http://www.w3.org/2000/svg", "use");
108-
use1.setAttribute(
109-
"href",
110-
imagesURL +
111-
"/build-status/build-status-sprite.svg#build-status-" +
112-
(isInProgress ? "in-progress" : "static"),
113-
);
114-
svg1.appendChild(use1);
115-
116-
const svg2 = document.createElementNS("http://www.w3.org/2000/svg", "svg");
117-
svg2.setAttribute(
118-
"class",
119-
"svg-icon icon-" + iconName + " " + (iconSizeClass || "icon-sm"),
120-
);
121-
svg2.setAttribute("viewBox", "0 0 24 24");
122-
const use2 = document.createElementNS("http://www.w3.org/2000/svg", "use");
123-
use2.setAttribute(
124-
"href",
125-
imagesURL + "/build-status/build-status-sprite.svg#" + buildStatus,
126-
);
127-
svg2.appendChild(use2);
128-
129-
const span = document.createElement("span");
130-
span.classList.add("build-status-icon__wrapper", "icon-" + iconName);
131-
132-
let span2 = document.createElement("span");
133-
span2.classList.add("build-status-icon__outer");
134-
span2.appendChild(svg1);
135-
136-
span.appendChild(span2);
137-
span.appendChild(svg2);
138-
139-
return span;
74+
return icons.content.querySelector(`#${iconName}`).cloneNode(true);
14075
}
14176

14277
/**
@@ -155,7 +90,7 @@ window.displayBuilds = function (data) {
15590
td1.classList.add("jenkins-table__cell--tight", "jenkins-table__icon");
15691
var div1 = document.createElement("div");
15792
div1.classList.add("jenkins-table__cell__button-wrapper");
158-
var svg = generateSVGIcon(e.iconName, p.dataset.iconSizeClass);
93+
var svg = generateSVGIcon(e.iconName);
15994
div1.appendChild(svg);
16095
td1.appendChild(div1);
16196
tr.appendChild(td1);

core/src/main/resources/hudson/model/Job/index.jelly

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ THE SOFTWARE.
3333
<j:set var="lastBuild" value="${it.lastBuild}" />
3434
<j:if test="${lastBuild != null}">
3535
<a href="${rootURL + '/' + lastBuild.url}" class="jenkins-!-display-contents" tabindex="-1">
36-
<l:icon class="${lastBuild.buildStatusIconClassName}" tooltip="${lastBuild.iconColor.description}"/>
36+
<l:icon src="symbol-status-${lastBuild.iconColor.iconName}" tooltip="${lastBuild.iconColor.description}"/>
3737
</a>
3838
</j:if>
3939
<h1 class="job-index-headline page-headline">

core/src/main/resources/hudson/model/Run/statusIcon.jelly

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ THE SOFTWARE.
3131
<st:compress xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:i="jelly:fmt">
3232
<st:setHeader name="X-Building" value="${it.building}" />
3333
<l:ajax>
34-
<l:icon alt="${it.iconColor.description}" class="${it.buildStatusIconClassName} icon-xlg" tooltip="${it.iconColor.description}"/>
34+
<l:icon alt="${it.iconColor.description}" src="symbol-status-${it.iconColor.iconName}" class="icon-xlg" tooltip="${it.iconColor.description}"/>
3535
</l:ajax>
3636
</st:compress>

core/src/main/resources/hudson/views/StatusColumn/column.jelly

+15-3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,18 @@ THE SOFTWARE.
2323
-->
2424

2525
<?jelly escape-by-default='true'?>
26-
<j:jelly xmlns:j="jelly:core" xmlns:t="/lib/hudson">
27-
<t:ballColorTd it="${job.iconColor}" />
28-
</j:jelly>
26+
<j:jelly xmlns:j="jelly:core" xmlns:l="/lib/layout">
27+
<td class="jenkins-table__cell--tight jenkins-table__icon" data="${job.iconColor.ordinal()}">
28+
<div class="jenkins-table__cell__button-wrapper">
29+
<j:choose>
30+
<j:when test="${job.iconColor.iconName != null}">
31+
<l:icon src="symbol-status-${job.iconColor.iconName}" tooltip="${job.iconColor.description}" />
32+
</j:when>
33+
<j:otherwise>
34+
<!-- This is for special conditions, such as folders -->
35+
<l:icon src="${job.iconColor.iconClassName}" />
36+
</j:otherwise>
37+
</j:choose>
38+
</div>
39+
</td>
40+
</j:jelly>

core/src/main/resources/hudson/widgets/HistoryWidget/entry.jelly

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ THE SOFTWARE.
3939
<div class="pane build-name">
4040
<div class="build-icon">
4141
<a class="build-status-link" href="${h.getConsoleUrl(build)}" tooltip="${build.iconColor.description} > ${%Console Output}">
42-
<l:icon class="${build.buildStatusIconClassName} icon-sm" />
42+
<l:icon src="symbol-status-${build.iconColor.iconName}" />
4343
</a>
4444
</div>
4545
<a class="model-link inside build-link display-name" update-parent-class=".build-row" href="${link}">${build.displayName}</a>

core/src/main/resources/jenkins/model/Jenkins/_legend.jelly

+16-16
Original file line numberDiff line numberDiff line change
@@ -29,87 +29,87 @@ THE SOFTWARE.
2929

3030
<dl class="app-icon-legend">
3131
<dt>
32-
<l:icon class="icon-blue icon-lg"/>
32+
<l:icon src="symbol-status-blue" />
3333
</dt>
3434
<dd>
3535
${%blue}
3636
</dd>
3737

3838
<dt>
39-
<l:icon class="icon-blue-anime icon-lg"/>
39+
<l:icon src="symbol-status-blue-anime" />
4040
</dt>
4141
<dd>
4242
${%blue_anime}
4343
</dd>
4444

4545
<dt>
46-
<l:icon class="icon-yellow icon-lg"/>
46+
<l:icon src="symbol-status-yellow" />
4747
</dt>
4848
<dd>
4949
${%yellow}
5050
</dd>
5151

5252
<dt>
53-
<l:icon class="icon-yellow-anime icon-lg"/>
53+
<l:icon src="symbol-status-yellow-anime" />
5454
</dt>
5555
<dd>
5656
${%yellow_anime}
5757
</dd>
5858

5959
<dt>
60-
<l:icon class="icon-red icon-lg"/>
60+
<l:icon src="symbol-status-red" />
6161
</dt>
6262
<dd>
6363
${%red}
6464
</dd>
6565

6666
<dt>
67-
<l:icon class="icon-red-anime icon-lg"/>
67+
<l:icon src="symbol-status-red-anime" />
6868
</dt>
6969
<dd>
7070
${%red_anime}
7171
</dd>
7272

7373
<dt>
74-
<l:icon class="icon-nobuilt icon-lg"/>
74+
<l:icon src="symbol-status-nobuilt" />
7575
</dt>
7676
<dd>
7777
${%lightgrey}
7878
</dd>
7979

8080
<dt>
81-
<l:icon class="icon-nobuilt-anime icon-lg"/>
81+
<l:icon src="symbol-status-nobuilt-anime" />
8282
</dt>
8383
<dd>
8484
${%lightgrey_anime}
8585
</dd>
8686

8787
<dt>
88-
<l:icon class="icon-disabled icon-lg"/>
88+
<l:icon src="symbol-status-aborted" />
8989
</dt>
9090
<dd>
91-
${%grey}
91+
${%darkgrey}
9292
</dd>
9393

9494
<dt>
95-
<l:icon class="icon-disabled-anime icon-lg"/>
95+
<l:icon src="symbol-status-aborted-anime" />
9696
</dt>
9797
<dd>
98-
${%grey_anime}
98+
${%darkgrey_anime}
9999
</dd>
100100

101101
<dt>
102-
<l:icon class="icon-aborted icon-lg"/>
102+
<l:icon src="symbol-status-disabled" />
103103
</dt>
104104
<dd>
105-
${%darkgrey}
105+
${%grey}
106106
</dd>
107107

108108
<dt>
109-
<l:icon class="icon-aborted-anime icon-lg"/>
109+
<l:icon src="symbol-status-disabled-anime" />
110110
</dt>
111111
<dd>
112-
${%darkgrey_anime}
112+
${%grey_anime}
113113
</dd>
114114
</dl>
115115

core/src/main/resources/lib/hudson/buildCaption.jelly

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ THE SOFTWARE.
2929
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
3030
<div class="jenkins-app-bar">
3131
<div class="jenkins-app-bar__content jenkins-build-caption">
32-
<l:icon alt="${it.iconColor.description}" class="${it.buildStatusIconClassName} icon-xlg"
32+
<l:icon alt="${it.iconColor.description}" src="symbol-status-${it.iconColor.iconName}"
3333
tooltip="${it.iconColor.description}"/>
3434
<h1>
3535
<d:invokeBody trim="true"/>

core/src/main/resources/lib/hudson/buildLink.jelly

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ THE SOFTWARE.
5252
</j:when>
5353
<j:otherwise>
5454
<a href="${attrs.href ?: rootURL+'/'+r.url}" class="model-link">
55-
<l:icon alt="${r.iconColor.description}" class="${r.buildStatusIconClassName} icon-sm" style="margin-left: 0; position: relative; top: -0.1rem;"/><span class="jenkins-icon-adjacent">${jobName_}#<!-- -->${number}</span></a>
55+
<l:icon alt="${r.iconColor.description}" src="symbol-status-${r.iconColor.iconName}" class="icon-sm" style="margin-left: 0; position: relative; top: -0.1rem;"/><span class="jenkins-icon-adjacent">${jobName_}#<!-- -->${number}</span></a>
5656
</j:otherwise>
5757
</j:choose>
5858
</j:otherwise>

core/src/main/resources/lib/hudson/buildListTable.jelly

+9
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,15 @@ THE SOFTWARE.
3030
A collection of builds to be displayed.
3131
</st:attribute>
3232
</st:documentation>
33+
<template id="jenkins-build-status-icons">
34+
<l:icon src="symbol-status-blue" id="blue" />
35+
<l:icon src="symbol-status-yellow" id="yellow" />
36+
<l:icon src="symbol-status-red" id="red" />
37+
<l:icon src="symbol-status-nobuilt" id="nobuilt" />
38+
<l:icon src="symbol-status-aborted" id="aborted" />
39+
<l:icon src="symbol-status-disabled" id="disabled" />
40+
<l:icon src="symbol-terminal" id="console" />
41+
</template>
3342

3443
<t:setIconSize/>
3544
<st:adjunct includes="hudson.model.Job.buildTimeTrend_resources" />

core/src/main/resources/lib/hudson/jobLink.jelly

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ THE SOFTWARE.
3131
</st:attribute>
3232
</st:documentation>
3333

34-
<l:icon alt="${job.iconColor.description}" class="${job.buildStatusIconClassName} icon-sm"/>
34+
<l:icon alt="${job.iconColor.description}" src="symbol-status-${job.iconColor.iconName}" class="icon-sm"/>
3535
<a href="${h.getRelativeLinkTo(job)}" class="model-link jenkins-icon-adjacent">
3636
<l:breakable value="${job.fullDisplayName}"/>
3737
</a>

core/src/main/resources/lib/hudson/projectView.jelly

+9-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,15 @@ THE SOFTWARE.
9393
<div class="jenkins-jobs-list__item">
9494
<a class="jenkins-jobs-list__item__details" href="${jobBaseUrl}${job.shortUrl}">
9595
<div class="jenkins-jobs-list__item__icons">
96-
<t:ballColorTd it="${job.iconColor}" />
96+
<j:choose>
97+
<j:when test="${job.iconColor.iconName != null}">
98+
<l:icon src="symbol-status-${job.iconColor.iconName}" tooltip="${job.iconColor.description}" />
99+
</j:when>
100+
<j:otherwise>
101+
<!-- This is for special conditions, such as folders -->
102+
<l:icon src="${job.iconColor.iconClassName}" />
103+
</j:otherwise>
104+
</j:choose>
97105
</div>
98106
<div class="jenkins-jobs-list__item__details__text">
99107
<p class="jenkins-jobs-list__item__label">${job.displayName}</p>
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading

0 commit comments

Comments
 (0)