Skip to content

Commit

Permalink
Use symbols for build status (#8705)
Browse files Browse the repository at this point in the history
* Init

* Rename ID

* Fix icon position

* Fix app bar build status icon being incorrect

* Address missed icons

---------

Co-authored-by: Alexander Brandes <[email protected]>
  • Loading branch information
janfaracik and NotMyFault authored Nov 27, 2023
1 parent f9f542b commit 1f95b09
Show file tree
Hide file tree
Showing 30 changed files with 157 additions and 103 deletions.
2 changes: 1 addition & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
root = true

[*.{js, scss, css, hbs}]
[*.{js, scss, css, hbs, svg}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ THE SOFTWARE.
<j:choose>
<j:when test="${dep.from!=null}">
<a href="${rootURL}/${dep.from.url}" class="model-link inside">
<l:icon class="${dep.from.buildStatusIconClassName} icon-sm" alt="${dep.from.iconColor.description}"/>${dep.from.displayName}</a>
<l:icon src="symbol-status-${dep.from.iconColor.iconName}" class="icon-sm" alt="${dep.from.iconColor.description}"/>${dep.from.displayName}</a>
</j:when>
<j:otherwise>
?
Expand All @@ -86,7 +86,7 @@ THE SOFTWARE.
&#x2192; <!-- right arrow -->

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

(<a href="${rootURL}/${dep.project.url}changes?from=${dep.fromId}&amp;to=${dep.toId}">${%detail}</a>)
</li>
Expand Down
8 changes: 8 additions & 0 deletions core/src/main/resources/hudson/model/Job/buildTimeTrend.jelly
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,14 @@ THE SOFTWARE.
<l:breadcrumb title="${%Build Time Trend}" />
<st:adjunct includes="hudson.model.Job.buildTimeTrend_resources" />
<l:main-panel>
<template id="jenkins-build-status-icons">
<l:icon src="symbol-status-blue" id="blue" />
<l:icon src="symbol-status-yellow" id="yellow" />
<l:icon src="symbol-status-red" id="red" />
<l:icon src="symbol-status-nobuilt" id="nobuilt" />
<l:icon src="symbol-status-aborted" id="aborted" />
<l:icon src="symbol-status-disabled" id="disabled" />
</template>
<h1>${%Build Time Trend}</h1>
<div align="center">
<img class="build-time-graph" src="buildTimeGraph/png" width="500" height="400" lazymap="buildTimeGraph/map" alt="[${%Build time graph}]" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,76 +67,11 @@ window.buildTimeTrend_displayBuilds = function (data) {
/**
* Generate SVG Icon
*/
function generateSVGIcon(iconName, iconSizeClass) {
const imagesURL = document.head.getAttribute("data-imagesurl");

const isInProgress = iconName.endsWith("anime");
let buildStatus = "never-built";
switch (iconName) {
case "red":
case "red-anime":
buildStatus = "last-failed";
break;
case "yellow":
case "yellow-anime":
buildStatus = "last-unstable";
break;
case "blue":
case "blue-anime":
buildStatus = "last-successful";
break;
case "grey":
case "grey-anime":
case "disabled":
case "disabled-anime":
buildStatus = "last-disabled";
break;
case "aborted":
case "aborted-anime":
buildStatus = "last-aborted";
break;
case "nobuilt":
case "nobuilt-anime":
buildStatus = "never-built";
break;
}
function generateSVGIcon(iconName) {
const icons = document.querySelector("#jenkins-build-status-icons");
iconName = iconName.replace("-anime", "");

const svg1 = document.createElementNS("http://www.w3.org/2000/svg", "svg");
svg1.setAttribute("class", "svg-icon");
svg1.setAttribute("viewBox", "0 0 24 24");
const use1 = document.createElementNS("http://www.w3.org/2000/svg", "use");
use1.setAttribute(
"href",
imagesURL +
"/build-status/build-status-sprite.svg#build-status-" +
(isInProgress ? "in-progress" : "static"),
);
svg1.appendChild(use1);

const svg2 = document.createElementNS("http://www.w3.org/2000/svg", "svg");
svg2.setAttribute(
"class",
"svg-icon icon-" + iconName + " " + (iconSizeClass || "icon-sm"),
);
svg2.setAttribute("viewBox", "0 0 24 24");
const use2 = document.createElementNS("http://www.w3.org/2000/svg", "use");
use2.setAttribute(
"href",
imagesURL + "/build-status/build-status-sprite.svg#" + buildStatus,
);
svg2.appendChild(use2);

const span = document.createElement("span");
span.classList.add("build-status-icon__wrapper", "icon-" + iconName);

let span2 = document.createElement("span");
span2.classList.add("build-status-icon__outer");
span2.appendChild(svg1);

span.appendChild(span2);
span.appendChild(svg2);

return span;
return icons.content.querySelector(`#${iconName}`).cloneNode(true);
}

/**
Expand All @@ -155,7 +90,7 @@ window.displayBuilds = function (data) {
td1.classList.add("jenkins-table__cell--tight", "jenkins-table__icon");
var div1 = document.createElement("div");
div1.classList.add("jenkins-table__cell__button-wrapper");
var svg = generateSVGIcon(e.iconName, p.dataset.iconSizeClass);
var svg = generateSVGIcon(e.iconName);
div1.appendChild(svg);
td1.appendChild(div1);
tr.appendChild(td1);
Expand Down
2 changes: 1 addition & 1 deletion core/src/main/resources/hudson/model/Job/index.jelly
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ THE SOFTWARE.
<j:set var="lastBuild" value="${it.lastBuild}" />
<j:if test="${lastBuild != null}">
<a href="${rootURL + '/' + lastBuild.url}" class="jenkins-!-display-contents" tabindex="-1">
<l:icon class="${lastBuild.buildStatusIconClassName}" tooltip="${lastBuild.iconColor.description}"/>
<l:icon src="symbol-status-${lastBuild.iconColor.iconName}" tooltip="${lastBuild.iconColor.description}"/>
</a>
</j:if>
<h1 class="job-index-headline page-headline">
Expand Down
2 changes: 1 addition & 1 deletion core/src/main/resources/hudson/model/Run/statusIcon.jelly
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,6 @@ THE SOFTWARE.
<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">
<st:setHeader name="X-Building" value="${it.building}" />
<l:ajax>
<l:icon alt="${it.iconColor.description}" class="${it.buildStatusIconClassName} icon-xlg" tooltip="${it.iconColor.description}"/>
<l:icon alt="${it.iconColor.description}" src="symbol-status-${it.iconColor.iconName}" class="icon-xlg" tooltip="${it.iconColor.description}"/>
</l:ajax>
</st:compress>
18 changes: 15 additions & 3 deletions core/src/main/resources/hudson/views/StatusColumn/column.jelly
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,18 @@ THE SOFTWARE.
-->

<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:t="/lib/hudson">
<t:ballColorTd it="${job.iconColor}" />
</j:jelly>
<j:jelly xmlns:j="jelly:core" xmlns:l="/lib/layout">

This comment has been minimized.

Copy link
@Pldi23

Pldi23 Jan 17, 2024

Contributor

Hi @janfaracik , we've encountered an issue with missing icons for types of Jobs which are relying on StatusIcon interface to provide correct icon. Now as ballColorTd tag is not used anymore the icon can not be retrieved using getImageOf method. Is it unintentional miss or StatusIcon interface is not supported anymore? I don't see if it was deprecated, but if it is what is suggested workaround? Thanks in advance.

<td class="jenkins-table__cell--tight jenkins-table__icon" data="${job.iconColor.ordinal()}">
<div class="jenkins-table__cell__button-wrapper">
<j:choose>
<j:when test="${job.iconColor.iconName != null}">
<l:icon src="symbol-status-${job.iconColor.iconName}" tooltip="${job.iconColor.description}" />
</j:when>
<j:otherwise>
<!-- This is for special conditions, such as folders -->
<l:icon src="${job.iconColor.iconClassName}" />
</j:otherwise>
</j:choose>
</div>
</td>
</j:jelly>
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ THE SOFTWARE.
<div class="pane build-name">
<div class="build-icon">
<a class="build-status-link" href="${h.getConsoleUrl(build)}" tooltip="${build.iconColor.description} > ${%Console Output}">
<l:icon class="${build.buildStatusIconClassName} icon-sm" />
<l:icon src="symbol-status-${build.iconColor.iconName}" />
</a>
</div>
<a class="model-link inside build-link display-name" update-parent-class=".build-row" href="${link}">${build.displayName}</a>
Expand Down
32 changes: 16 additions & 16 deletions core/src/main/resources/jenkins/model/Jenkins/_legend.jelly
Original file line number Diff line number Diff line change
Expand Up @@ -29,87 +29,87 @@ THE SOFTWARE.

<dl class="app-icon-legend">
<dt>
<l:icon class="icon-blue icon-lg"/>
<l:icon src="symbol-status-blue" />
</dt>
<dd>
${%blue}
</dd>

<dt>
<l:icon class="icon-blue-anime icon-lg"/>
<l:icon src="symbol-status-blue-anime" />
</dt>
<dd>
${%blue_anime}
</dd>

<dt>
<l:icon class="icon-yellow icon-lg"/>
<l:icon src="symbol-status-yellow" />
</dt>
<dd>
${%yellow}
</dd>

<dt>
<l:icon class="icon-yellow-anime icon-lg"/>
<l:icon src="symbol-status-yellow-anime" />
</dt>
<dd>
${%yellow_anime}
</dd>

<dt>
<l:icon class="icon-red icon-lg"/>
<l:icon src="symbol-status-red" />
</dt>
<dd>
${%red}
</dd>

<dt>
<l:icon class="icon-red-anime icon-lg"/>
<l:icon src="symbol-status-red-anime" />
</dt>
<dd>
${%red_anime}
</dd>

<dt>
<l:icon class="icon-nobuilt icon-lg"/>
<l:icon src="symbol-status-nobuilt" />
</dt>
<dd>
${%lightgrey}
</dd>

<dt>
<l:icon class="icon-nobuilt-anime icon-lg"/>
<l:icon src="symbol-status-nobuilt-anime" />
</dt>
<dd>
${%lightgrey_anime}
</dd>

<dt>
<l:icon class="icon-disabled icon-lg"/>
<l:icon src="symbol-status-aborted" />
</dt>
<dd>
${%grey}
${%darkgrey}
</dd>

<dt>
<l:icon class="icon-disabled-anime icon-lg"/>
<l:icon src="symbol-status-aborted-anime" />
</dt>
<dd>
${%grey_anime}
${%darkgrey_anime}
</dd>

<dt>
<l:icon class="icon-aborted icon-lg"/>
<l:icon src="symbol-status-disabled" />
</dt>
<dd>
${%darkgrey}
${%grey}
</dd>

<dt>
<l:icon class="icon-aborted-anime icon-lg"/>
<l:icon src="symbol-status-disabled-anime" />
</dt>
<dd>
${%darkgrey_anime}
${%grey_anime}
</dd>
</dl>

Expand Down
2 changes: 1 addition & 1 deletion core/src/main/resources/lib/hudson/buildCaption.jelly
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ THE SOFTWARE.
<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">
<div class="jenkins-app-bar">
<div class="jenkins-app-bar__content jenkins-build-caption">
<l:icon alt="${it.iconColor.description}" class="${it.buildStatusIconClassName} icon-xlg"
<l:icon alt="${it.iconColor.description}" src="symbol-status-${it.iconColor.iconName}"
tooltip="${it.iconColor.description}"/>
<h1>
<d:invokeBody trim="true"/>
Expand Down
2 changes: 1 addition & 1 deletion core/src/main/resources/lib/hudson/buildLink.jelly
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ THE SOFTWARE.
</j:when>
<j:otherwise>
<a href="${attrs.href ?: rootURL+'/'+r.url}" class="model-link">
<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>
<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>
</j:otherwise>
</j:choose>
</j:otherwise>
Expand Down
9 changes: 9 additions & 0 deletions core/src/main/resources/lib/hudson/buildListTable.jelly
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,15 @@ THE SOFTWARE.
A collection of builds to be displayed.
</st:attribute>
</st:documentation>
<template id="jenkins-build-status-icons">
<l:icon src="symbol-status-blue" id="blue" />
<l:icon src="symbol-status-yellow" id="yellow" />
<l:icon src="symbol-status-red" id="red" />
<l:icon src="symbol-status-nobuilt" id="nobuilt" />
<l:icon src="symbol-status-aborted" id="aborted" />
<l:icon src="symbol-status-disabled" id="disabled" />
<l:icon src="symbol-terminal" id="console" />
</template>

<t:setIconSize/>
<st:adjunct includes="hudson.model.Job.buildTimeTrend_resources" />
Expand Down
2 changes: 1 addition & 1 deletion core/src/main/resources/lib/hudson/jobLink.jelly
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ THE SOFTWARE.
</st:attribute>
</st:documentation>

<l:icon alt="${job.iconColor.description}" class="${job.buildStatusIconClassName} icon-sm"/>
<l:icon alt="${job.iconColor.description}" src="symbol-status-${job.iconColor.iconName}" class="icon-sm"/>
<a href="${h.getRelativeLinkTo(job)}" class="model-link jenkins-icon-adjacent">
<l:breakable value="${job.fullDisplayName}"/>
</a>
Expand Down
10 changes: 9 additions & 1 deletion core/src/main/resources/lib/hudson/projectView.jelly
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,15 @@ THE SOFTWARE.
<div class="jenkins-jobs-list__item">
<a class="jenkins-jobs-list__item__details" href="${jobBaseUrl}${job.shortUrl}">
<div class="jenkins-jobs-list__item__icons">
<t:ballColorTd it="${job.iconColor}" />
<j:choose>
<j:when test="${job.iconColor.iconName != null}">
<l:icon src="symbol-status-${job.iconColor.iconName}" tooltip="${job.iconColor.description}" />
</j:when>
<j:otherwise>
<!-- This is for special conditions, such as folders -->
<l:icon src="${job.iconColor.iconClassName}" />
</j:otherwise>
</j:choose>
</div>
<div class="jenkins-jobs-list__item__details__text">
<p class="jenkins-jobs-list__item__label">${job.displayName}</p>
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions war/src/main/resources/images/symbols/status-aborted.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions war/src/main/resources/images/symbols/status-blue-anime.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions war/src/main/resources/images/symbols/status-blue.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions war/src/main/resources/images/symbols/status-disabled.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions war/src/main/resources/images/symbols/status-nobuilt.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions war/src/main/resources/images/symbols/status-red-anime.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 1f95b09

Please sign in to comment.