提交 5f806d8f 编写于 作者: K Kohsuke Kawaguchi

Marked various mode-link as inside.

Observations:

- When marked inside, moving the mouse to <A> and clicking the context menu becomes easier,
  because you can move the mouse toward the hot spot area and it'll activate.
  Otherwise you have to move the mouse over to <A>, then move the mouse on the side, click it,
  then click the menu, which adds cognitive stress.

- Marking model link as inside creates an empty space to the right of <A>, which looks
  odd if hyperlinks appear inline or if some other text follows it.

Given that, my guiding principle for this change is:

- any model link that is the last child of a block element gets marked as inside
- I've adjust a few text to get rid of the single-letter training text after a model link,
  like "(#3)" to "- #3"
- If another inline element follows a model link, leave it as is.
  This does create an ugly overlap.
上级 e6ee4abc
......@@ -37,6 +37,7 @@ import hudson.util.FormApply;
import hudson.util.RunList;
import hudson.util.XStream2;
import jenkins.model.Jenkins;
import jenkins.model.ModelObjectWithContextMenu;
import net.sf.json.JSONObject;
import org.acegisecurity.Authentication;
......@@ -100,7 +101,7 @@ import javax.annotation.Nonnull;
* @author Kohsuke Kawaguchi
*/
@ExportedBean
public class User extends AbstractModelObject implements AccessControlled, DescriptorByNameOwner, Saveable, Comparable<User> {
public class User extends AbstractModelObject implements AccessControlled, DescriptorByNameOwner, Saveable, Comparable<User>, ModelObjectWithContextMenu {
private transient final String id;
......@@ -695,6 +696,10 @@ public class User extends AbstractModelObject implements AccessControlled, Descr
return Collections.unmodifiableList(actions);
}
public ContextMenu doContextMenu(StaplerRequest request, StaplerResponse response) throws Exception {
return new ContextMenu().from(this,request,response);
}
public static abstract class CanonicalIdResolver extends AbstractDescribableImpl<CanonicalIdResolver> implements Comparable<CanonicalIdResolver> {
/**
......
......@@ -35,7 +35,7 @@ THE SOFTWARE.
<img src="${imagesURL}/24x24/grey.png" tooltip="${%Not run}" alt="${%Not run}" height="24" width="24"/>
</j:when>
<j:otherwise>
<a href="${p.nearestRunUrl}" class="model-link">
<a href="${p.nearestRunUrl}" class="model-link inside">
<img src="${imagesURL}/24x24/${b.buildStatusUrl}" tooltip="${p.tooltip} ${it.number!=b.number?(it.isBuilding()?'- pending' : '- skipped'):''}" alt="${p.tooltip}" style="${it.number!=b.number?'opacity:0.5':''}" height="24" width="24"/>
<j:if test="${empty(o.x) and empty(o.y)}">
${p.combination.toString(o.z)}
......
......@@ -34,7 +34,7 @@ THE SOFTWARE.
<img src="${imagesURL}/24x24/grey.png" tooltip="${%Not configured}" alt="${%Not configured}" height="24" width="24"/>
</j:when>
<j:otherwise>
<a href="${p.shortUrl}" class="model-link">
<a href="${p.shortUrl}" class="model-link inside">
<img src="${imagesURL}/24x24/${p.buildStatusUrl}" tooltip="${p.iconColor.description}" alt="${p.iconColor.description}" height="24" width="24"/>
<j:if test="${empty(o.x) and empty(o.y)}">
${p.combination.toString(o.z)}
......
......@@ -43,8 +43,7 @@ THE SOFTWARE.
<j:set var="atr" value="${it.lastCompletedBuild.aggregatedTestResultAction}"/>
<j:if test="${atr!=null}">
<t:summary icon="clipboard.png">
<a href="lastCompletedBuild/testReport/" class="model-link">${%Latest Test Result}</a>
<st:nbsp/>
<a href="lastCompletedBuild/testReport/" class="model-link inside">${%Latest Test Result}</a>
<t:test-result it="${atr}" />
</t:summary>
</j:if>
......
......@@ -77,7 +77,7 @@ THE SOFTWARE.
<st:nbsp/>
<j:choose>
<j:when test="${dep.from!=null}">
<a href="${rootURL}/${dep.from.url}" class="model-link">
<a href="${rootURL}/${dep.from.url}" class="model-link inside">
<img src="${imagesURL}/16x16/${dep.from.buildStatusUrl}"
alt="${dep.from.iconColor.description}" height="16" width="16" />${dep.from.displayName}</a>
</j:when>
......@@ -88,7 +88,7 @@ THE SOFTWARE.
&#x2192; <!-- right arrow -->
<a href="${rootURL}/${dep.to.url}" class="model-link">
<a href="${rootURL}/${dep.to.url}" class="model-link inside">
<img src="${imagesURL}/16x16/${dep.to.buildStatusUrl}"
alt="${dep.to.iconColor.description}" height="16" width="16" />${dep.to.displayName}</a>
......@@ -122,7 +122,7 @@ THE SOFTWARE.
<ul style="list-style-type: none;">
<j:forEach var="item" items="${upstream}">
<li>
<a href="${rootURL}/${item.key.url}" class="model-link">${item.key.displayName}</a>
<a href="${rootURL}/${item.key.url}" class="model-link inside">${item.key.displayName}</a>
<t:buildLink job="${item.key}" number="${item.value}" />
</li>
</j:forEach>
......@@ -134,7 +134,7 @@ THE SOFTWARE.
<ul style="list-style-type: none;">
<j:forEach var="item" items="${downstream}">
<li>
<a href="${rootURL}/${item.key.url}" class="model-link">${item.key.displayName}</a>
<a href="${rootURL}/${item.key.url}" class="model-link inside">${item.key.displayName}</a>
<j:choose>
<j:when test="${item.value.isEmpty()}">
(${%none})
......
......@@ -55,8 +55,7 @@ THE SOFTWARE.
<j:if test="${tr!=null}">
<j:if test="${tr.class.name != 'hudson.tasks.test.AggregatedTestResultAction'}">
<t:summary icon="clipboard.png">
<a href="lastCompletedBuild/testReport/" class="model-link">${%Latest Test Result}</a>
<st:nbsp/>
<a href="lastCompletedBuild/testReport/" class="model-link inside">${%Latest Test Result}</a>
<t:test-result it="${tr}" />
</t:summary>
</j:if>
......@@ -65,8 +64,7 @@ THE SOFTWARE.
<j:set var="atr" value="${it.lastCompletedBuild.aggregatedTestResultAction}"/>
<j:if test="${atr!=null}">
<t:summary icon="clipboard.png">
<a href="lastCompletedBuild/aggregatedTestReport/" class="model-link">${%Latest Aggregated Test Result}</a>
<st:nbsp/>
<a href="lastCompletedBuild/aggregatedTestReport/" class="model-link inside">${%Latest Aggregated Test Result}</a>
<t:test-result it="${atr}" />
</t:summary>
</j:if>
......
......@@ -93,8 +93,7 @@ THE SOFTWARE.
<j:forEach var="entry" items="${it.node.labelCloud}">
<!-- Skip the label for this node -->
<j:if test="${entry.item!=it.node.selfLabel}">
<a class="${entry.className} model-link" href="${rootURL}/label/${entry.item.name}">${entry.item.name}</a>
<st:nbsp/>
<a class="${entry.className} model-link inside" href="${rootURL}/label/${entry.item.name}">${entry.item.name}</a>
</j:if>
</j:forEach>
</div>
......
......@@ -56,7 +56,7 @@ THE SOFTWARE.
<td width="32" data="${c.icon}">
<img src="${imagesURL}/32x32/${c.icon}" width="32" height="32" alt="${c.iconAltText}"/>
</td>
<td><a href="${rootURL}/${c.url}" class="model-link">${c.displayName}</a></td>
<td><a href="${rootURL}/${c.url}" class="model-link inside">${c.displayName}</a></td>
<j:forEach var="m" items="${monitors}">
<j:if test="${m.columnCaption!=null}">
<j:set var="data" value="${m.data(c)}"/>
......
......@@ -73,7 +73,7 @@ THE SOFTWARE.
<td class="fingerprint-summary-header">
<j:choose>
<j:when test="${job!=null}">
<a href="${rootURL}/${job.url}" class="model-link">${j}</a>
<a href="${rootURL}/${job.url}" class="model-link inside">${j}</a>
</j:when>
<j:otherwise>
${j}
......
......@@ -57,8 +57,8 @@ THE SOFTWARE.
<img width="16" height="16" src="${imagesURL}/16x16/${r.buildStatusUrl}" alt="${r.iconColor.description}" />
</td>
<td data="${r.number}">
<a href="${r.number}/" class="model-link">
${r.displayName}
<a href="${r.number}/" class="model-link inside">
${r.displayName}
</a>
</td>
<td data="${r.duration}">
......
......@@ -36,11 +36,10 @@ THE SOFTWARE.
${%Nodes:}
<j:forEach var="n" items="${it.nodes}">
<j:set var="c" value="${app.getComputer(n.nodeName)}"/>
<a href="${rootURL}/computer/${n.nodeName}" class="model-link">
<a href="${rootURL}/computer/${n.nodeName}" class="model-link inside">
<img src="${imagesURL}/16x16/${c.icon}" width="16" height="16" alt=""/>
${c.displayName}
</a>
<st:nbsp />
</j:forEach>
</div>
......
......@@ -32,7 +32,7 @@ THE SOFTWARE.
<j:set var="b" value="${it.resolve(job)}"/>
<j:if test="${b!=null}">
<li>
<a class="model-link tl-tr" href="${it.id}/">${%format(it.displayName,b.displayName,b.timestampString)}</a>
<a class="model-link inside tl-tr" href="${it.id}/">${%format(it.displayName,b.displayName,b.timestampString)}</a>
</li>
</j:if>
</j:jelly>
......@@ -27,6 +27,6 @@ THE SOFTWARE.
xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form"
xmlns:i="jelly:fmt" xmlns:p="/lib/hudson/project">
<f:entry title="${it.name}" description="${it.description}">
<a href="${rootURL}/${it.run.url}" class="model-link">${it.run}</a>
<a href="${rootURL}/${it.run.url}" class="model-link inside">${it.run}</a>
</f:entry>
</j:jelly>
......@@ -50,7 +50,7 @@ THE SOFTWARE.
var d = document.createElement('td');
var a = document.createElement('a');
a.href = '${rootURL}/' + e.url;
a.className = 'model-link';
a.className = 'model-link inside';
var i = document.createElement('img');
i.src = e.avatar;
i.className = 'icon${iconSize}';
......@@ -81,7 +81,7 @@ THE SOFTWARE.
if (e.projectUrl != null) {
a = document.createElement('a');
a.href = '${rootURL}/' + e.projectUrl;
a.className = 'model-link';
a.className = 'model-link inside';
a.appendChild(document.createTextNode(e.projectFullDisplayName));
d.appendChild(a);
}
......
......@@ -53,7 +53,7 @@ THE SOFTWARE.
&#8212;
<a href="${rootURL}/${c.author.url}/" class="model-link">${c.author}</a> /
<a href="${rootURL}/${c.author.url}/" class="model-link inside">${c.author}</a> /
<j:set var="cslink" value="${browser.getChangeSetLink(c)}"/>
<j:choose>
......
......@@ -39,7 +39,7 @@ THE SOFTWARE.
</tr>
<j:forEach var="user" items="${it.allUsers}">
<tr>
<td><a href="${user.url}/" class="model-link"><img src="${h.getUserAvatar(user,'32x32')}" alt="" height="32" width="32"/></a></td>
<td><a href="${user.url}/" class="model-link inside"><img src="${h.getUserAvatar(user,'32x32')}" alt="" height="32" width="32"/></a></td>
<td><a href="${user.url}/">${user.id}</a></td>
<td><a href="${user.url}/">${user}</a></td>
<td>
......
......@@ -41,11 +41,10 @@ THE SOFTWARE.
<j:if test="${test != null}">
<tr>
<td class="pane">
<a href="${app.rootUrl}${b.url}testReport${p.url}" class="model-link">${b.fullDisplayName}</a>
<st:nbsp/>
<j:forEach var="badge" items="${test.testActions}">
<st:include it="${badge}" page="badge.jelly" optional="true"/>
</j:forEach>
<a href="${app.rootUrl}${b.url}testReport${p.url}" class="model-link inside">${b.fullDisplayName}</a>
<j:forEach var="badge" items="${test.testActions}">
<st:include it="${badge}" page="badge.jelly" optional="true"/>
</j:forEach>
</td>
<td class="pane" style="text-align:left"><j:out value="${test.description}"/></td>
<td class="pane" style="text-align:left" data="${test.duration}">${test.durationString}</td>
......
......@@ -36,8 +36,7 @@ THE SOFTWARE.
<j:forEach var="p" items="${it.children}" varStatus="status">
<tr>
<td class="pane">
<a href="${p.safeName}" class="model-link"><span style="${p.previousResult==null?'font-weight:bold':''}"><st:out value="${p.name}" /></span></a>
<st:nbsp/>
<a href="${p.safeName}" class="model-link inside"><span style="${p.previousResult==null?'font-weight:bold':''}"><st:out value="${p.name}" /></span></a>
<j:forEach var="badge" items="${p.testActions}">
<st:include it="${badge}" page="badge.jelly" optional="true"/>
</j:forEach>
......
......@@ -41,10 +41,9 @@ THE SOFTWARE.
<tr>
<td class="pane">
<a href="${app.rootUrl}${b.url}testReport${p.url}" class="model-link">${b.fullDisplayName}</a>
<st:nbsp/>
<j:forEach var="badge" items="${p.testActions}">
<st:include it="${badge}" page="badge.jelly" optional="true"/>
</j:forEach>
<j:forEach var="badge" items="${p.testActions}">
<st:include it="${badge}" page="badge.jelly" optional="true"/>
</j:forEach>
</td>
<td class="pane" style="text-align:right"><j:out value="${p.description}"/></td>
<td class="pane" style="text-align:right" data="${p.duration}">${p.durationString}</td>
......
......@@ -61,7 +61,7 @@ THE SOFTWARE.
<j:forEach var="i" items="${it.didntRun}">
<tr>
<td class="pane">
<a href="${rootURL}/${i.url}" class="model-link">${i.fullDisplayName}</a>
<a href="${rootURL}/${i.url}" class="model-link inside">${i.fullDisplayName}</a>
(${%test result not available})
</td>
<td class="pane">
......@@ -75,7 +75,7 @@ THE SOFTWARE.
<j:forEach var="i" items="${it.noFingerprints}">
<tr>
<td class="pane">
<a href="${rootURL}/${i.url}" class="model-link">${i.fullDisplayName}</a>
<a href="${rootURL}/${i.url}" class="model-link inside">${i.fullDisplayName}</a>
(${%last successful job is not fingerprinted})
</td>
<td class="pane">
......
......@@ -42,7 +42,7 @@ THE SOFTWARE.
<j:forEach var="report" items="${it.childReports}">
<tr>
<td class="pane">
<a href="../${report.child.project.shortUrl}testReport" class="model-link">${report.child.project.name}</a>
<a href="../${report.child.project.shortUrl}testReport" class="model-link inside">${report.child.project.name}</a>
</td>
<td data="${report.result.duration}" class="pane" style="text-align:right">
${report.result.durationString}
......@@ -74,7 +74,7 @@ THE SOFTWARE.
<h3>
<a name="${report.child.project.name}"/>
<a href="../${report.child.project.shortUrl}testReport" class="model-link">${report.child.project.name}</a>
<a href="../${report.child.project.shortUrl}testReport" class="model-link inside">${report.child.project.name}</a>
</h3>
<table class="pane sortable">
......@@ -86,12 +86,11 @@ THE SOFTWARE.
<j:forEach var="f" items="${report.result.failedTests}" varStatus="i">
<tr>
<td class="pane">
<a href="../${report.child.project.shortUrl}testReport/${f.getRelativePathFrom(report.result)}" class="model-link">
<a href="../${report.child.project.shortUrl}testReport/${f.getRelativePathFrom(report.result)}" class="model-link inside">
<st:out value="${f.fullName}"/>
<st:nbsp/>
<j:forEach var="badge" items="${f.testActions}">
<st:include it="${badge}" page="badge.jelly" optional="true"/>
</j:forEach>
<j:forEach var="badge" items="${f.testActions}">
<st:include it="${badge}" page="badge.jelly" optional="true"/>
</j:forEach>
</a>
</td>
<td class="pane" style="text-align:right;">
......
......@@ -63,8 +63,7 @@ THE SOFTWARE.
<a id="test-${f.fullName}-hidelink" style="display:none"
href="javascript:hideStackTrace('test-${h.jsStringEscape(f.fullName)}')">&lt;&lt;&lt;</a>
<st:nbsp/>
<a href="${f.getRelativePathFrom(it)}" class="model-link"><st:out value="${f.fullName}"/></a>
<st:nbsp/>
<a href="${f.getRelativePathFrom(it)}" class="model-link inside"><st:out value="${f.fullName}"/></a>
<j:forEach var="badge" items="${f.testActions}">
<st:include it="${badge}" page="badge.jelly" optional="true"/>
</j:forEach>
......@@ -77,7 +76,7 @@ THE SOFTWARE.
${f.durationString}
</td>
<td class="pane" style="text-align:right;">
<a href="${rootURL}/${f.failedSinceRun.url}" class="model-link">${f.age}</a>
<a href="${rootURL}/${f.failedSinceRun.url}" class="model-link inside">${f.age}</a>
</td>
</tr>
</j:forEach>
......@@ -103,11 +102,10 @@ THE SOFTWARE.
<j:set var="prev" value="${prevAll.findCorrespondingResult(p.id)}" />
<tr>
<td class="pane">
<a href="${p.safeName}/" class="model-link"><span style="${prev==null?'font-weight:bold':''}"><st:out value="${p.name}" /></span></a>
<st:nbsp/>
<j:forEach var="badge" items="${p.testActions}">
<st:include it="${badge}" page="badge.jelly" optional="true"/>
</j:forEach>
<a href="${p.safeName}/" class="model-link inside"><span style="${prev==null?'font-weight:bold':''}"><st:out value="${p.name}" /></span></a>
<j:forEach var="badge" items="${p.testActions}">
<st:include it="${badge}" page="badge.jelly" optional="true"/>
</j:forEach>
</td>
<td class="pane" style="text-align:right" data="${p.duration}">${p.durationString}</td>
<td class="pane" style="text-align:right">${p.failCount}</td>
......
......@@ -41,10 +41,9 @@ THE SOFTWARE.
<tr>
<td class="pane">
<a href="${app.rootUrl}${b.url}testReport${p.url}" class="model-link">${b.fullDisplayName}</a>
<st:nbsp/>
<j:forEach var="badge" items="${p.testActions}">
<st:include it="${badge}" page="badge.jelly" optional="true"/>
</j:forEach>
<j:forEach var="badge" items="${p.testActions}">
<st:include it="${badge}" page="badge.jelly" optional="true"/>
</j:forEach>
</td>
<td class="pane" style="text-align:right"><j:out value="${p.description}"/></td>
<td class="pane" style="text-align:right" data="${p.duration}">${p.durationString}</td>
......
......@@ -25,6 +25,6 @@ THE SOFTWARE.
<?jelly escape-by-default='true'?>
<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" xmlns:i="jelly:fmt">
<td style="${indenter.getCss(job)}">
<a href="${jobBaseUrl}${job.shortUrl}" class='model-link'> ${h.getRelativeDisplayNameFrom(job,currentView.owner.itemGroup)}</a>
<a href="${jobBaseUrl}${job.shortUrl}" class='model-link inside'> ${h.getRelativeDisplayNameFrom(job,currentView.owner.itemGroup)}</a>
</td>
</j:jelly>
\ No newline at end of file
......@@ -29,7 +29,7 @@ THE SOFTWARE.
<j:choose>
<j:when test="${lfBuild!=null}">
${lfBuild.timestampString}
(<a href="${jobBaseUrl}${job.shortUrl}lastFailedBuild/" class="model-link">${lfBuild.displayName}</a>)
- <a href="${jobBaseUrl}${job.shortUrl}lastFailedBuild/" class="model-link inside">${lfBuild.displayName}</a>
</j:when>
<j:otherwise>
${%N/A}
......
......@@ -29,7 +29,7 @@ THE SOFTWARE.
<j:choose>
<j:when test="${lstBuild!=null}">
${lstBuild.timestampString}
(<a href="${jobBaseUrl}${job.shortUrl}lastStableBuild/" class="model-link">${lstBuild.displayName}</a>)
- <a href="${jobBaseUrl}${job.shortUrl}lastStableBuild/" class="model-link inside">${lstBuild.displayName}</a>
</j:when>
<j:otherwise>
${%N/A}
......
......@@ -29,7 +29,7 @@ THE SOFTWARE.
<j:choose>
<j:when test="${lsBuild!=null}">
${lsBuild.timestampString}
(<a href="${jobBaseUrl}${job.shortUrl}lastSuccessfulBuild/" class="model-link">${lsBuild.displayName}</a>)
- <a href="${jobBaseUrl}${job.shortUrl}lastSuccessfulBuild/" class="model-link inside">${lsBuild.displayName}</a>
</j:when>
<j:otherwise>
${%N/A}
......
......@@ -29,5 +29,5 @@ THE SOFTWARE.
Displays a link when given an AbstractItem. It is assumed that that Abstract
Item is passed in ${it}
</st:documentation>
<a href="${it.absoluteUrl}" class="model-link">${it.displayName}</a>
<a href="${it.absoluteUrl}" class="model-link inside">${it.displayName}</a>
</j:jelly>
\ No newline at end of file
......@@ -47,7 +47,7 @@ THE SOFTWARE.
<j:forEach var="b" items="${h.subList(attrs.builds,50)}">
<tr>
<td data="${b.iconColor.ordinal()}">
<a href="${jobBaseUrl}${b.url}" class="model-link">
<a href="${jobBaseUrl}${b.url}">
<img src="${imagesURL}/${iconSize}/${b.buildStatusUrl}"
alt="${b.iconColor.description}" class="icon${iconSize}"/>
</a>
......@@ -55,7 +55,7 @@ THE SOFTWARE.
<td>
<a href="${jobBaseUrl}${b.parent.url}" class="model-link">${b.parent.fullDisplayName}</a>
<st:nbsp/>
<a href="${jobBaseUrl}${b.url}" class="model-link">${b.displayName}</a>
<a href="${jobBaseUrl}${b.url}" class="model-link inside">${b.displayName}</a>
</td>
<td data="${b.timestampString2}" tooltip="${%Click to center timeline on event}" onclick="javascript:tl.getBand(0).scrollToCenter(Timeline.DateTime.parseGregorianDateTime('${b.timestampString2}'))">
${b.timestampString}
......
......@@ -33,7 +33,7 @@ THE SOFTWARE.
</st:documentation>
<d:taglib uri="local">
<d:tag name="computerCaption">
<a href="${rootURL}/${c.url}" class="model-link">${title}</a>
<a href="${rootURL}/${c.url}" class="model-link inside">${title}</a>
<j:if test="${c.offline}"> <st:nbsp/> (${%offline})</j:if>
<j:if test="${!c.acceptingTasks}"> <st:nbsp/> (${%suspended})</j:if>
</d:tag>
......@@ -57,7 +57,7 @@ THE SOFTWARE.
<td class="pane">
<j:choose>
<j:when test="${c.offline}">
<a href="${rootURL}/${c.url}" class="model-link">${%Offline}</a>
<a href="${rootURL}/${c.url}" class="model-link inside">${%Offline}</a>
</j:when>
<j:otherwise>
${%Idle}
......@@ -79,7 +79,7 @@ THE SOFTWARE.
</j:invokeStatic>
<j:choose>
<j:when test="${h.hasPermission(exeparent,exeparent.READ)}">
<a href="${rootURL}/${exeparent.url}" class="model-link">${exeparent.fullDisplayName}</a>&#160;<a href="${rootURL}/${exe.url}" class="model-link">#${exe.number}</a>
<a href="${rootURL}/${exeparent.url}">${exeparent.fullDisplayName}</a>&#160;<a href="${rootURL}/${exe.url}" class="model-link inside">#${exe.number}</a>
<t:buildProgressBar build="${exe}" executor="${executor}"/>
</j:when>
<j:otherwise>
......
......@@ -31,7 +31,7 @@ THE SOFTWARE.
</st:documentation>
<j:choose>
<j:when test="${value!=null and value!=app}">
<a href="${rootURL}/computer/${value.nodeName}" class="model-link">${value.nodeName}</a>
<a href="${rootURL}/computer/${value.nodeName}" class="model-link inside">${value.nodeName}</a>
</j:when>
<j:when test="${valueStr != null and valueStr != ''}">
${valueStr}
......
......@@ -36,7 +36,7 @@ THE SOFTWARE.
<j:set var="b" value="${it[property]}"/>
<j:if test="${b!=null}">
<li>
<a href="${property}/" class="model-link">${%format(title,b.number,b.timestampString)}</a>
<a href="${property}/" class="model-link inside">${%format(title,b.number,b.timestampString)}</a>
</li>
</j:if>
</j:jelly>
\ No newline at end of file
......@@ -48,7 +48,7 @@ THE SOFTWARE.
</div>
</td>
<td colspan="5" style="${indenter.getCss(job)}">
<a href="${rootURL}/${v.url}" class="model-link">
<a href="${rootURL}/${v.url}" class="model-link inside">
${v.viewName}
</a>
</td>
......
......@@ -62,7 +62,7 @@ THE SOFTWARE.
<j:set var="stuck" value="${item.isStuck()}"/>
<j:choose>
<j:when test="${h.hasPermission(item.task,item.task.READ)}">
<a href="${rootURL}/${item.task.url}" class="model-link tl-tr" tooltip="${item.why}${h.escape(item.params)}&lt;br&gt;${%WaitingFor(item.inQueueForString)}">
<a href="${rootURL}/${item.task.url}" class="model-link inside tl-tr" tooltip="${item.why}${h.escape(item.params)}&lt;br&gt;${%WaitingFor(item.inQueueForString)}">
${item.task.fullDisplayName}
</a>
<!-- XXX include estimated number as in BuildHistoryWidget/entries.jelly if possible -->
......
......@@ -184,7 +184,7 @@ ${h.initPageVariables(context)}
<j:choose>
<j:when test="${!h.isAnonymous()}">
<span style="white-space:nowrap">
<a href="${rootURL}/user/${app.authentication.name}" class="model-link"><b>${app.authentication.name}</b></a>
<a href="${rootURL}/user/${app.authentication.name}" class="model-link inside"><b>${app.authentication.name}</b></a>
<j:if test="${app.securityRealm.canLogOut()}">
|
<a href="${rootURL}/logout"><b>${%logout}</b></a>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册