Skip to content

Commit

Permalink
move the header parts in a taglib (#9223)
Browse files Browse the repository at this point in the history
the taglib allows plugins to make use of the searchbox and the login
stuff while easily being able to modify all the other aspects of the
header.
  • Loading branch information
mawinter69 committed May 18, 2024
1 parent 94f7154 commit c0c1999
Show file tree
Hide file tree
Showing 5 changed files with 85 additions and 74 deletions.
Original file line number Diff line number Diff line change
@@ -1,78 +1,8 @@
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:i="jelly:fmt" xmlns:x="jelly:xml">
<j:jelly xmlns:j="jelly:core" xmlns:h="/lib/layout/header">
<header id="page-header" class="page-header">
<div class="page-header__brand">
<div class="logo">
<a id="jenkins-home-link" href="${rootURL}/">
<img id="jenkins-head-icon" src="${imagesURL}/svgs/logo.svg" alt="[${logoAlt}]" />
<img id="jenkins-name-icon" src="${imagesURL}/title.svg" alt="${title}" width="139" height="34" />
</a>
</div>

<a class="page-header__brand-link" href="${rootURL}/">
<img src="${imagesURL}/svgs/logo.svg"
alt="[${logoAlt}]"
class="page-header__brand-image" />
<span class="page-header__brand-name">Jenkins</span>
</a>
</div>

<div class="searchbox hidden-xs">
<!-- search box -->
<j:set var="searchURL" value="${h.searchURL}"/>
<form action="${searchURL}" method="get" style="position:relative;" class="no-json" name="search" role="search">
<!-- this div is used to calculate the width of the text box -->
<div id="search-box-sizer"/>
<div id="searchform">
<input name="q" placeholder="${searchPlaceholder}" id="search-box" class="main-search__input" value="${request.getParameter('q')}" role="searchbox" />

<span class="main-search__icon-leading">
<l:icon src="symbol-search"/>
</span>
<a href="${searchHelpUrl}" class="main-search__icon-trailing">
<l:icon src="symbol-help-circle"/>
</a>

<div id="search-box-completion" data-search-url="${searchURL}" />
<st:adjunct includes="jenkins.views.JenkinsHeader.search-box" />
</div>
</form>
</div>

<div class="login page-header__hyperlinks">
<div id="visible-am-insertion" class="page-header__am-wrapper" />
<div id="visible-sec-am-insertion" class="page-header__am-wrapper" />

<!-- user icon and login/logout links; only show if authentication is enabled and we're not handling a servlet error -->
<j:if test="${app.useSecurity}">
<j:choose>
<j:when test="${!h.isAnonymous()}">
<j:invokeStatic var="user" className="hudson.model.User" method="current" />
<j:choose>
<j:when test="${user.fullName == null || user.fullName.trim().isEmpty()}">
<j:set var="userName" value="${user.id}"/>
</j:when>
<j:otherwise>
<j:set var="userName" value="${user.fullName}"/>
</j:otherwise>
</j:choose>
<a href="${rootURL}/${user.url}" class="model-link">
<l:icon src="symbol-person-circle" class="icon-md"/>
<span class="hidden-xs hidden-sm">${userName}</span>
</a>
<j:if test="${app.securityRealm.canLogOut()}">
<a href="${rootURL}/logout">
<l:icon src="symbol-log-out" class="icon-md" />
<span class="hidden-xs hidden-sm">${logout}</span>
</a>
</j:if>
</j:when>
<j:otherwise>
<st:include it="${app.securityRealm}" page="loginLink.jelly" />
</j:otherwise>
</j:choose>
</j:if>
</div>
<h:logo/>
<h:searchbox/>
<h:login/>
</header>
<script src="${resURL}/jsbundles/keyboard-shortcuts.js" type="text/javascript"/>
</j:jelly>
37 changes: 37 additions & 0 deletions core/src/main/resources/lib/layout/header/login.jelly
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:l="/lib/layout">
<div class="login page-header__hyperlinks">
<div id="visible-am-insertion" class="page-header__am-wrapper" />
<div id="visible-sec-am-insertion" class="page-header__am-wrapper" />

<!-- user icon and login/logout links; only show if authentication is enabled and we're not handling a servlet error -->
<j:if test="${app.useSecurity}">
<j:choose>
<j:when test="${!h.isAnonymous()}">
<j:invokeStatic var="user" className="hudson.model.User" method="current" />
<j:choose>
<j:when test="${user.fullName == null || user.fullName.trim().isEmpty()}">
<j:set var="userName" value="${user.id}"/>
</j:when>
<j:otherwise>
<j:set var="userName" value="${user.fullName}"/>
</j:otherwise>
</j:choose>
<a href="${rootURL}/${user.url}" class="model-link">
<l:icon src="symbol-person-circle" class="icon-md"/>
<span class="hidden-xs hidden-sm">${userName}</span>
</a>
<j:if test="${app.securityRealm.canLogOut()}">
<a href="${rootURL}/logout">
<l:icon src="symbol-log-out" class="icon-md" />
<span class="hidden-xs hidden-sm">${logout}</span>
</a>
</j:if>
</j:when>
<j:otherwise>
<st:include it="${app.securityRealm}" page="loginLink.jelly" />
</j:otherwise>
</j:choose>
</j:if>
</div>
</j:jelly>
18 changes: 18 additions & 0 deletions core/src/main/resources/lib/layout/header/logo.jelly
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core">
<div class="page-header__brand">
<div class="logo">
<a id="jenkins-home-link" href="${rootURL}/">
<img id="jenkins-head-icon" src="${imagesURL}/svgs/logo.svg" alt="[${logoAlt}]" />
<img id="jenkins-name-icon" src="${imagesURL}/title.svg" alt="${title}" width="139" height="34" />
</a>
</div>

<a class="page-header__brand-link" href="${rootURL}/">
<img src="${imagesURL}/svgs/logo.svg"
alt="[${logoAlt}]"
class="page-header__brand-image" />
<span class="page-header__brand-name">Jenkins</span>
</a>
</div>
</j:jelly>
25 changes: 25 additions & 0 deletions core/src/main/resources/lib/layout/header/searchbox.jelly
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:l="/lib/layout">
<div class="searchbox hidden-xs">
<!-- search box -->
<j:set var="searchURL" value="${h.searchURL}"/>
<form action="${searchURL}" method="get" style="position:relative;" class="no-json" name="search" role="search">
<!-- this div is used to calculate the width of the text box -->
<div id="search-box-sizer"/>
<div id="searchform">
<input name="q" placeholder="${searchPlaceholder}" id="search-box" class="main-search__input" value="${request.getParameter('q')}" role="searchbox" />

<span class="main-search__icon-leading">
<l:icon src="symbol-search"/>
</span>
<a href="${searchHelpUrl}" class="main-search__icon-trailing">
<l:icon src="symbol-help-circle"/>
</a>

<div id="search-box-completion" data-search-url="${searchURL}" />
<st:adjunct includes="jenkins.views.JenkinsHeader.search-box" />
</div>
</form>
</div>
<script src="${resURL}/jsbundles/keyboard-shortcuts.js" type="text/javascript"/>
</j:jelly>
1 change: 1 addition & 0 deletions core/src/main/resources/lib/layout/header/taglib
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Tag library that defines components for headers

0 comments on commit c0c1999

Please sign in to comment.