templates: Use HTML.attributes for all links
This commit is contained in:
@@ -112,16 +112,16 @@ END;
|
|||||||
[% IF c.user_exists %]
|
[% IF c.user_exists %]
|
||||||
[% IF available %]
|
[% IF available %]
|
||||||
[% IF build.keep %]
|
[% IF build.keep %]
|
||||||
<a class="dropdown-item" href="[% c.uri_for('/build' build.id 'keep' 0) %]">Unkeep</a>
|
<a class="dropdown-item" [% HTML.attributes(href => c.uri_for('/build' build.id 'keep' 0)) %]>Unkeep</a>
|
||||||
[% ELSE %]
|
[% ELSE %]
|
||||||
<a class="dropdown-item" href="[% c.uri_for('/build' build.id 'keep' 1) %]">Keep</a>
|
<a class="dropdown-item" [% HTML.attributes(href => c.uri_for('/build' build.id 'keep' 1)) %]>Keep</a>
|
||||||
[% END %]
|
[% END %]
|
||||||
[% END %]
|
[% END %]
|
||||||
[% IF build.finished %]
|
[% IF build.finished %]
|
||||||
<a class="dropdown-item" href="[% c.uri_for('/build' build.id 'restart') %]">Restart</a>
|
<a class="dropdown-item" [% HTML.attributes(href => c.uri_for('/build' build.id 'restart')) %]>Restart</a>
|
||||||
[% ELSE %]
|
[% ELSE %]
|
||||||
<a class="dropdown-item" href="[% c.uri_for('/build' build.id 'cancel') %]">Cancel</a>
|
<a class="dropdown-item" [% HTML.attributes(href => c.uri_for('/build' build.id 'cancel')) %]>Cancel</a>
|
||||||
<a class="dropdown-item" href="[% c.uri_for('/build' build.id 'bump') %]">Bump up</a>
|
<a class="dropdown-item" [% HTML.attributes(href => c.uri_for('/build' build.id 'bump')) %]>Bump up</a>
|
||||||
[% END %]
|
[% END %]
|
||||||
[% END %]
|
[% END %]
|
||||||
</div>
|
</div>
|
||||||
@@ -197,8 +197,8 @@ END;
|
|||||||
<tr>
|
<tr>
|
||||||
<th>Part of:</th>
|
<th>Part of:</th>
|
||||||
<td>
|
<td>
|
||||||
<a href="[% c.uri_for(c.controller('JobsetEval').action_for('view'), [eval.id]) %]">evaluation [% HTML.escape(eval.id) %]</a>
|
<a [% HTML.attributes(href => c.uri_for(c.controller('JobsetEval').action_for('view'), [eval.id])) %]>evaluation [% HTML.escape(eval.id) %]</a>
|
||||||
[% IF nrEvals > 1 +%] (and <a href="[% c.uri_for('/build' build.id 'evals') %]">[% nrEvals - 1 %] others</a>)[% END %]
|
[% IF nrEvals > 1 +%] (and <a [% HTML.attributes(href => c.uri_for('/build' build.id 'evals')) %]>[% nrEvals - 1 %] others</a>)[% END %]
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
[% END %]
|
[% END %]
|
||||||
@@ -226,9 +226,9 @@ END;
|
|||||||
<th>Logfile:</th>
|
<th>Logfile:</th>
|
||||||
<td>
|
<td>
|
||||||
[% actualLog = cachedBuildStep ? c.uri_for('/build' cachedBuild.id 'nixlog' cachedBuildStep.stepnr) : c.uri_for('/build' build.id 'log') %]
|
[% actualLog = cachedBuildStep ? c.uri_for('/build' cachedBuild.id 'nixlog' cachedBuildStep.stepnr) : c.uri_for('/build' build.id 'log') %]
|
||||||
<a class="btn btn-secondary btn-sm" href="[%actualLog%]">pretty</a>
|
<a class="btn btn-secondary btn-sm" [% HTML.attributes(href => actualLog) %]>pretty</a>
|
||||||
<a class="btn btn-secondary btn-sm" href="[%actualLog%]/raw">raw</a>
|
<a class="btn btn-secondary btn-sm" [% HTML.attributes(href => actualLog _ "/raw") %]>raw</a>
|
||||||
<a class="btn btn-secondary btn-sm" href="[%actualLog%]/tail">tail</a>
|
<a class="btn btn-secondary btn-sm" [% HTML.attributes(href => actualLog _ "/tail") %]>tail</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
[% END %]
|
[% END %]
|
||||||
@@ -376,14 +376,14 @@ END;
|
|||||||
<tr>
|
<tr>
|
||||||
<th>Closure size:</th>
|
<th>Closure size:</th>
|
||||||
<td>[% mibs(build.closuresize / (1024 * 1024)) %] MiB
|
<td>[% mibs(build.closuresize / (1024 * 1024)) %] MiB
|
||||||
(<a href="[%chartsURL%]">history</a>)</td>
|
(<a [% HTML.attributes(href => chartsURL) %]>history</a>)</td>
|
||||||
</tr>
|
</tr>
|
||||||
[% END %]
|
[% END %]
|
||||||
[% IF build.finished && build.closuresize %]
|
[% IF build.finished && build.closuresize %]
|
||||||
<tr>
|
<tr>
|
||||||
<th>Output size:</th>
|
<th>Output size:</th>
|
||||||
<td>[% mibs(build.size / (1024 * 1024)) %] MiB
|
<td>[% mibs(build.size / (1024 * 1024)) %] MiB
|
||||||
(<a href="[%chartsURL%]">history</a>)</td>
|
(<a [% HTML.attributes(href => chartsURL) %]>history</a>)</td>
|
||||||
</tr>
|
</tr>
|
||||||
[% END %]
|
[% END %]
|
||||||
[% IF build.finished && build.buildproducts %]
|
[% IF build.finished && build.buildproducts %]
|
||||||
@@ -532,9 +532,9 @@ END;
|
|||||||
[% IF runcommandlog.uuid != undef %]
|
[% IF runcommandlog.uuid != undef %]
|
||||||
[% runLog = c.uri_for('/build', build.id, 'runcommandlog', runcommandlog.uuid) %]
|
[% runLog = c.uri_for('/build', build.id, 'runcommandlog', runcommandlog.uuid) %]
|
||||||
<div>
|
<div>
|
||||||
<a class="btn btn-secondary btn-sm" href="[% runLog %]">pretty</a>
|
<a class="btn btn-secondary btn-sm" [% HTML.attributes(href => runLog) %]>pretty</a>
|
||||||
<a class="btn btn-secondary btn-sm" href="[% runLog %]/raw">raw</a>
|
<a class="btn btn-secondary btn-sm" [% HTML.attributes(href => runLog) %]/raw">raw</a>
|
||||||
<a class="btn btn-secondary btn-sm" href="[% runLog %]/tail">tail</a>
|
<a class="btn btn-secondary btn-sm" [% HTML.attributes(href => runLog) %]/tail">tail</a>
|
||||||
</div>
|
</div>
|
||||||
[% END %]
|
[% END %]
|
||||||
</div>
|
</div>
|
||||||
|
@@ -49,7 +49,7 @@ installed, you can subscribe to this channel by once executing</p>
|
|||||||
[% b = pkg.build %]
|
[% b = pkg.build %]
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="[% c.uri_for('/build' b.id) %]">[% b.id %]</a></td>
|
<td><a [% HTML.attributes(href => c.uri_for('/build' b.id)) %]>[% b.id %]</a></td>
|
||||||
<td><tt>[% b.get_column('releasename') || b.nixname %]</tt></td>
|
<td><tt>[% b.get_column('releasename') || b.nixname %]</tt></td>
|
||||||
<td><tt>[% b.system %]</tt></td>
|
<td><tt>[% b.system %]</tt></td>
|
||||||
<td>
|
<td>
|
||||||
|
@@ -55,17 +55,17 @@ BLOCK renderRelativeDate %]
|
|||||||
[% END;
|
[% END;
|
||||||
|
|
||||||
BLOCK renderProjectName %]
|
BLOCK renderProjectName %]
|
||||||
<a [% IF inRow %]class="row-link"[% END %] href="[% c.uri_for('/project' project) %]"><tt>[% project %]</tt></a>
|
<a [% IF inRow %]class="row-link"[% END %] [% HTML.attributes(href => c.uri_for('/project' project)) %]><tt>[% project %]</tt></a>
|
||||||
[% END;
|
[% END;
|
||||||
|
|
||||||
|
|
||||||
BLOCK renderJobsetName %]
|
BLOCK renderJobsetName %]
|
||||||
<a [% IF inRow %]class="row-link"[% END %] href="[% c.uri_for('/jobset' project jobset) %]"><tt>[% jobset %]</tt></a>
|
<a [% IF inRow %]class="row-link"[% END %] [% HTML.attributes(href => c.uri_for('/jobset' project jobset)) %]><tt>[% jobset %]</tt></a>
|
||||||
[% END;
|
[% END;
|
||||||
|
|
||||||
|
|
||||||
BLOCK renderJobName %]
|
BLOCK renderJobName %]
|
||||||
<a [% IF inRow %]class="row-link"[% END %] href="[% c.uri_for('/job' project jobset job) %]">[% job %]</a>
|
<a [% IF inRow %]class="row-link"[% END %] [% HTML.attributes(href => c.uri_for('/job' project jobset job)) %]>[% job %]</a>
|
||||||
[% END;
|
[% END;
|
||||||
|
|
||||||
|
|
||||||
@@ -140,10 +140,10 @@ BLOCK renderBuildListBody;
|
|||||||
[% IF showSchedulingInfo %]
|
[% IF showSchedulingInfo %]
|
||||||
<td>[% IF busy %]<span class="badge badge-success">Started</span>[% ELSE %]<span class="badge badge-secondary">Queued</span>[% END %]</td>
|
<td>[% IF busy %]<span class="badge badge-success">Started</span>[% ELSE %]<span class="badge badge-secondary">Queued</span>[% END %]</td>
|
||||||
[% END %]
|
[% END %]
|
||||||
<td><a class="row-link" href="[% link %]">[% build.id %]</a></td>
|
<td><a class="row-link" [% HTML.attributes(href => link) %]>[% build.id %]</a></td>
|
||||||
[% IF !hideJobName %]
|
[% IF !hideJobName %]
|
||||||
<td>
|
<td>
|
||||||
<a href="[%link%]">[% IF !hideJobsetName %][%build.jobset.get_column("project")%]:[%build.jobset.get_column("name")%]:[% END %][%build.get_column("job")%]</a>
|
<a [% HTML.attributes(href => link) %]>[% IF !hideJobsetName %][%build.jobset.get_column("project")%]:[%build.jobset.get_column("name")%]:[% END %][%build.get_column("job")%]</a>
|
||||||
[% IF showStepName %]
|
[% IF showStepName %]
|
||||||
[% INCLUDE renderDrvInfo step=build.buildsteps releasename=build.nixname %]
|
[% INCLUDE renderDrvInfo step=build.buildsteps releasename=build.nixname %]
|
||||||
[% END %]
|
[% END %]
|
||||||
@@ -158,7 +158,7 @@ BLOCK renderBuildListBody;
|
|||||||
</tr>
|
</tr>
|
||||||
[% END;
|
[% END;
|
||||||
IF linkToAll %]
|
IF linkToAll %]
|
||||||
<tr><td class="centered" colspan="5"><a href="[% linkToAll %]"><em>More...</em></a></td></tr>
|
<tr><td class="centered" colspan="5"><a [% HTML.attributes(href => linkToAll) %]><em>More...</em></a></td></tr>
|
||||||
[% END;
|
[% END;
|
||||||
END;
|
END;
|
||||||
|
|
||||||
@@ -176,7 +176,7 @@ BLOCK renderBuildList;
|
|||||||
END;
|
END;
|
||||||
|
|
||||||
|
|
||||||
BLOCK renderLink %]<a href="[% uri %]">[% title %]</a>[% END;
|
BLOCK renderLink %]<a [% HTML.attributes(href => uri) %]>[% title %]</a>[% END;
|
||||||
|
|
||||||
|
|
||||||
BLOCK maybeLink;
|
BLOCK maybeLink;
|
||||||
@@ -216,12 +216,12 @@ BLOCK editString; %]
|
|||||||
|
|
||||||
|
|
||||||
BLOCK renderFullBuildLink;
|
BLOCK renderFullBuildLink;
|
||||||
INCLUDE renderFullJobNameOfBuild build=build %] <a href="[% c.uri_for('/build' build.id) %]">build [% build.id %]</a>[%
|
INCLUDE renderFullJobNameOfBuild build=build %] <a [% HTML.attributes(href => c.uri_for('/build' build.id)) %]>build [% build.id %]</a>[%
|
||||||
END;
|
END;
|
||||||
|
|
||||||
|
|
||||||
BLOCK renderBuildIdLink; %]
|
BLOCK renderBuildIdLink; %]
|
||||||
<a href="[% c.uri_for('/build' id) %]">build [% id %]</a>
|
<a [% HTML.attributes(href => c.uri_for('/build' id)) %]>build [% id %]</a>
|
||||||
[% END;
|
[% END;
|
||||||
|
|
||||||
|
|
||||||
@@ -320,7 +320,7 @@ END;
|
|||||||
|
|
||||||
BLOCK renderShortInputValue;
|
BLOCK renderShortInputValue;
|
||||||
IF input.type == "build" || input.type == "sysbuild" %]
|
IF input.type == "build" || input.type == "sysbuild" %]
|
||||||
<a href="[% c.uri_for('/build' input.dependency.id) %]">[% input.dependency.id %]</a>
|
<a [% HTML.attributes(href => c.uri_for('/build' input.dependency.id)) %]>[% input.dependency.id %]</a>
|
||||||
[% ELSIF input.type == "string" %]
|
[% ELSIF input.type == "string" %]
|
||||||
<tt>"[% HTML.escape(input.value) %]"</tt>
|
<tt>"[% HTML.escape(input.value) %]"</tt>
|
||||||
[% ELSIF input.type == "nix" || input.type == "boolean" %]
|
[% ELSIF input.type == "nix" || input.type == "boolean" %]
|
||||||
@@ -338,7 +338,7 @@ BLOCK renderDiffUri;
|
|||||||
url = bi1.uri;
|
url = bi1.uri;
|
||||||
path = url.replace(base, '');
|
path = url.replace(base, '');
|
||||||
IF url.match(base) %]
|
IF url.match(base) %]
|
||||||
<a target="_blank" href="[% m.uri.replace('_path_', path).replace('_1_', bi1.revision).replace('_2_', bi2.revision) %]">[% contents %]</a>
|
<a target="_blank" [% HTML.attributes(href => m.uri.replace('_path_', path).replace('_1_', bi1.revision).replace('_2_', bi2.revision)) %]>[% contents %]</a>
|
||||||
[% nouri = 0;
|
[% nouri = 0;
|
||||||
END;
|
END;
|
||||||
END;
|
END;
|
||||||
@@ -347,13 +347,13 @@ BLOCK renderDiffUri;
|
|||||||
url = res.0;
|
url = res.0;
|
||||||
branch = res.1;
|
branch = res.1;
|
||||||
IF bi1.type == "hg" || bi1.type == "git" %]
|
IF bi1.type == "hg" || bi1.type == "git" %]
|
||||||
<a target="_blank" href="[% HTML.escape(c.uri_for('/api/scmdiff', {
|
<a target="_blank" [% HTML.attributes(href => c.uri_for('/api/scmdiff', {
|
||||||
uri = url,
|
uri = url,
|
||||||
rev1 = bi1.revision,
|
rev1 = bi1.revision,
|
||||||
rev2 = bi2.revision,
|
rev2 = bi2.revision,
|
||||||
type = bi1.type,
|
type = bi1.type,
|
||||||
branch = branch
|
branch = branch
|
||||||
})) %]">[% contents %]</a>
|
})) %]>[% contents %]</a>
|
||||||
[% ELSE;
|
[% ELSE;
|
||||||
contents;
|
contents;
|
||||||
END;
|
END;
|
||||||
@@ -443,10 +443,10 @@ BLOCK renderInputDiff; %]
|
|||||||
|
|
||||||
BLOCK renderPager %]
|
BLOCK renderPager %]
|
||||||
<ul class="pagination">
|
<ul class="pagination">
|
||||||
<li class="page-item[% IF page == 1 %] disabled[% END %]"><a class="page-link" href="[% "$baseUri?page=1" %]">« First</a></li>
|
<li class="page-item[% IF page == 1 %] disabled[% END %]"><a class="page-link" [% HTML.attributes(href => "$baseUri?page=1") %]>« First</a></li>
|
||||||
<li class="page-item[% IF page == 1 %] disabled[% END %]"><a class="page-link" href="[% "$baseUri?page="; (page - 1) %]">‹ Previous</a></li>
|
<li class="page-item[% IF page == 1 %] disabled[% END %]"><a class="page-link" [% HTML.attributes(href => "$baseUri?page="); (page - 1) %]>‹ Previous</a></li>
|
||||||
<li class="page-item[% IF page * resultsPerPage >= total %] disabled[% END %]"><a class="page-link" href="[% "$baseUri?page="; (page + 1) %]">Next ›</a></li>
|
<li class="page-item[% IF page * resultsPerPage >= total %] disabled[% END %]"><a class="page-link" [% HTML.attributes(href => "$baseUri?page="); (page + 1) %]>Next ›</a></li>
|
||||||
<li class="page-item[% IF page * resultsPerPage >= total %] disabled[% END %]"><a class="page-link" href="[% "$baseUri?page="; (total - 1) div resultsPerPage + 1 %]">Last »</a></li>
|
<li class="page-item[% IF page * resultsPerPage >= total %] disabled[% END %]"><a class="page-link" [% HTML.attributes("$baseUri?page="); (total - 1) div resultsPerPage + 1 %]>Last »</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
[% END;
|
[% END;
|
||||||
|
|
||||||
@@ -459,7 +459,7 @@ BLOCK renderShortEvalInput;
|
|||||||
[% ELSIF input.type == "hg" %]
|
[% ELSIF input.type == "hg" %]
|
||||||
<tt>[% input.revision.substr(0, 12) %]</tt>
|
<tt>[% input.revision.substr(0, 12) %]</tt>
|
||||||
[% ELSIF input.type == "build" || input.type == "sysbuild" %]
|
[% ELSIF input.type == "build" || input.type == "sysbuild" %]
|
||||||
<a href="[% c.uri_for('/build' input.get_column('dependency')) %]">[% input.get_column('dependency') %]</a>
|
<a [% HTML.attributes(href => c.uri_for('/build' input.get_column('dependency'))) %]>[% input.get_column('dependency') %]</a>
|
||||||
[% ELSE %]
|
[% ELSE %]
|
||||||
<tt>[% input.revision %]</tt>
|
<tt>[% input.revision %]</tt>
|
||||||
[% END;
|
[% END;
|
||||||
@@ -498,7 +498,7 @@ BLOCK renderEvals %]
|
|||||||
eval = e.eval;
|
eval = e.eval;
|
||||||
link = c.uri_for(c.controller('JobsetEval').action_for('view'), [eval.id]) %]
|
link = c.uri_for(c.controller('JobsetEval').action_for('view'), [eval.id]) %]
|
||||||
<tr>
|
<tr>
|
||||||
<td><a class="row-link" href="[% link %]">[% eval.id %]</a></td>
|
<td><a class="row-link" [% HTML.attributes(href => link) %]>[% eval.id %]</a></td>
|
||||||
[% IF !jobset && !build %]
|
[% IF !jobset && !build %]
|
||||||
<td>[% INCLUDE renderFullJobsetName project=eval.jobset.project.name jobset=eval.jobset.name %]</td>
|
<td>[% INCLUDE renderFullJobsetName project=eval.jobset.project.name jobset=eval.jobset.name %]</td>
|
||||||
[% END %]
|
[% END %]
|
||||||
@@ -540,7 +540,7 @@ BLOCK renderEvals %]
|
|||||||
</tr>
|
</tr>
|
||||||
[% END;
|
[% END;
|
||||||
IF linkToAll %]
|
IF linkToAll %]
|
||||||
<tr><td class="centered" colspan="7"><a href="[% linkToAll %]"><em>More...</em></a></td></tr>
|
<tr><td class="centered" colspan="7"><a [% HTML.attributes(href => linkToAll) %]><em>More...</em></a></td></tr>
|
||||||
[% END %]
|
[% END %]
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@@ -548,7 +548,7 @@ BLOCK renderEvals %]
|
|||||||
|
|
||||||
|
|
||||||
BLOCK renderLogLinks %]
|
BLOCK renderLogLinks %]
|
||||||
(<a [% IF inRow %]class="row-link"[% END %] href="[% url %]">log</a>, <a href="[% "$url/raw" %]">raw</a>, <a href="[% "$url/tail" %]">tail</a>)
|
(<a [% IF inRow %]class="row-link"[% END %] [% HTML.attributes(href => url) %]>log</a>, <a [% HTML.attributes(href => "$url/raw") %]>raw</a>, <a [% HTML.attributes(href => "$url/tail") %]>tail</a>)
|
||||||
[% END;
|
[% END;
|
||||||
|
|
||||||
|
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td><span class="[% IF !jobExists(j.job.jobset j.job.job) %]disabled-job[% END %]">[% INCLUDE renderFullJobName project=j.job.get_column('project') jobset=j.job.get_column('jobset') job=j.job.job %]</span></td>
|
<td><span class="[% IF !jobExists(j.job.jobset j.job.job) %]disabled-job[% END %]">[% INCLUDE renderFullJobName project=j.job.get_column('project') jobset=j.job.get_column('jobset') job=j.job.job %]</span></td>
|
||||||
[% FOREACH b IN j.builds %]
|
[% FOREACH b IN j.builds %]
|
||||||
<td><a href="[% c.uri_for('/build' b.id) %]">[% INCLUDE renderBuildStatusIcon size=16 build=b %]</a></td>
|
<td><a [% HTML.attributes(href => c.uri_for('/build' b.id)) %]>[% INCLUDE renderBuildStatusIcon size=16 build=b %]</a></td>
|
||||||
[% END %]
|
[% END %]
|
||||||
</tr>
|
</tr>
|
||||||
[% END %]
|
[% END %]
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
[% END %]
|
[% END %]
|
||||||
<span id="[% done.${node.path} %]"><span class="dep-tree-line">
|
<span id="[% done.${node.path} %]"><span class="dep-tree-line">
|
||||||
[% IF node.buildStep %]
|
[% IF node.buildStep %]
|
||||||
<a href="[% c.uri_for('/build' node.buildStep.get_column('build')) %]"><tt>[% node.name %]</tt></a> [%
|
<a [% HTML.attributes(href => c.uri_for('/build' node.buildStep.get_column('build'))) %]><tt>[% node.name %]</tt></a> [%
|
||||||
IF buildStepLogExists(node.buildStep);
|
IF buildStepLogExists(node.buildStep);
|
||||||
INCLUDE renderLogLinks url=c.uri_for('/build' node.buildStep.get_column('build') 'nixlog' node.buildStep.stepnr);
|
INCLUDE renderLogLinks url=c.uri_for('/build' node.buildStep.get_column('build') 'nixlog' node.buildStep.stepnr);
|
||||||
END %]
|
END %]
|
||||||
|
@@ -10,8 +10,8 @@
|
|||||||
|
|
||||||
[% IF !jobExists(jobset, job) %]
|
[% IF !jobExists(jobset, job) %]
|
||||||
<div class="alert alert-warning">This job is not a member of the <a
|
<div class="alert alert-warning">This job is not a member of the <a
|
||||||
href="[%c.uri_for('/jobset' project.name jobset.name
|
[% HTML.attributes(href => c.uri_for('/jobset' project.name jobset.name
|
||||||
'evals')%]">latest evaluation</a> of its jobset. This means it was
|
'evals')) %]>latest evaluation</a> of its jobset. This means it was
|
||||||
removed or had an evaluation error.</div>
|
removed or had an evaluation error.</div>
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ removed or had an evaluation error.</div>
|
|||||||
<th class="rotate-45">
|
<th class="rotate-45">
|
||||||
[% agg_ = aggregates.$agg %]
|
[% agg_ = aggregates.$agg %]
|
||||||
<div><span class="[% agg_.build.finished == 0 ? "text-info" : (agg_.build.buildstatus == 0 ? "text-success" : "text-warning") %] override-link">
|
<div><span class="[% agg_.build.finished == 0 ? "text-info" : (agg_.build.buildstatus == 0 ? "text-success" : "text-warning") %] override-link">
|
||||||
<a href="[% c.uri_for('/build' agg) %]">[% agg %]</a>
|
<a [% HTML.attributes(href => c.uri_for('/build' agg)) %]>[% agg %]</a>
|
||||||
</span></div></th>
|
</span></div></th>
|
||||||
[% END %]
|
[% END %]
|
||||||
</tr>
|
</tr>
|
||||||
@@ -70,7 +70,7 @@ removed or had an evaluation error.</div>
|
|||||||
[% FOREACH agg IN aggs %]
|
[% FOREACH agg IN aggs %]
|
||||||
<td>
|
<td>
|
||||||
[% r = aggregates.$agg.constituents.$j; IF r.id %]
|
[% r = aggregates.$agg.constituents.$j; IF r.id %]
|
||||||
<a href="[% c.uri_for('/build' r.id) %]">
|
<a [% HTML.attributes(href => c.uri_for('/build' r.id)) %]>
|
||||||
[% INCLUDE renderBuildStatusIcon size=16 build=r %]
|
[% INCLUDE renderBuildStatusIcon size=16 build=r %]
|
||||||
</a>
|
</a>
|
||||||
[% END %]
|
[% END %]
|
||||||
@@ -89,8 +89,8 @@ removed or had an evaluation error.</div>
|
|||||||
|
|
||||||
<div id="tabs-links" class="tab-pane">
|
<div id="tabs-links" class="tab-pane">
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="[% c.uri_for('/job' project.name jobset.name job 'latest') %]">Latest successful build</a></li>
|
<li><a [% HTML.attributes(href => c.uri_for('/job' project.name jobset.name job 'latest')) %]>Latest successful build</a></li>
|
||||||
<li><a href="[% c.uri_for('/job' project.name jobset.name job 'latest-finished') %]">Latest successful build from a finished evaluation</a></li>
|
<li><a [% HTML.attributes(href => c.uri_for('/job' project.name jobset.name job 'latest-finished')) %]>Latest successful build from a finished evaluation</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@@ -14,7 +14,7 @@
|
|||||||
[% FOREACH eval IN evalIds %]
|
[% FOREACH eval IN evalIds %]
|
||||||
<th class="rotate-45">
|
<th class="rotate-45">
|
||||||
<div><span>
|
<div><span>
|
||||||
<a href="[% c.uri_for('/eval' eval) %]">[% INCLUDE renderRelativeDate timestamp=evals.$eval.timestamp %]</a>
|
<a [% HTML.attributes(href => c.uri_for('/eval' eval)) %]>[% INCLUDE renderRelativeDate timestamp=evals.$eval.timestamp %]</a>
|
||||||
</span></div></th>
|
</span></div></th>
|
||||||
[% END %]
|
[% END %]
|
||||||
</tr>
|
</tr>
|
||||||
@@ -22,9 +22,9 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
[% FOREACH chan IN channels-%]
|
[% FOREACH chan IN channels-%]
|
||||||
<tr>
|
<tr>
|
||||||
<th><span><a href="[% c.uri_for('/channel/custom' project.name jobset.name chan) %]">[% chan %]</a></span></th>
|
<th><span><a [% HTML.attributes(href => c.uri_for('/channel/custom' project.name jobset.name chan)) %]>[% chan %]</a></span></th>
|
||||||
[% FOREACH eval IN evalIds %]
|
[% FOREACH eval IN evalIds %]
|
||||||
<td>[% r = evals.$eval.builds.$chan; IF r.id %]<a href="[% c.uri_for('/build' r.id) %]">[% INCLUDE renderBuildStatusIcon size=16 build=r %]</a>[% END %]</td>
|
<td>[% r = evals.$eval.builds.$chan; IF r.id %]<a [% HTML.attributes(href => c.uri_for('/build' r.id)) %]>[% INCLUDE renderBuildStatusIcon size=16 build=r %]</a>[% END %]</td>
|
||||||
[% END %]
|
[% END %]
|
||||||
</tr>
|
</tr>
|
||||||
[% END %]
|
[% END %]
|
||||||
|
@@ -27,9 +27,9 @@ eval.checkouttime %]s and evaluation took [% eval.evaltime %]s.</p>
|
|||||||
|
|
||||||
[% IF otherEval %]
|
[% IF otherEval %]
|
||||||
<p>Comparisons are relative to [% INCLUDE renderFullJobsetName
|
<p>Comparisons are relative to [% INCLUDE renderFullJobsetName
|
||||||
project=otherEval.jobset.project.name jobset=otherEval.jobset.name %] evaluation <a href="[%
|
project=otherEval.jobset.project.name jobset=otherEval.jobset.name %] evaluation <a [%
|
||||||
c.uri_for(c.controller('JobsetEval').action_for('view'),
|
HTML.attributes(href => c.uri_for(c.controller('JobsetEval').action_for('view'),
|
||||||
[otherEval.id]) %]">[% otherEval.id %]</a>.</p>
|
[otherEval.id])) %]>[% otherEval.id %]</a>.</p>
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|
||||||
<form>
|
<form>
|
||||||
@@ -45,18 +45,18 @@ c.uri_for(c.controller('JobsetEval').action_for('view'),
|
|||||||
<li class="nav-item dropdown">
|
<li class="nav-item dropdown">
|
||||||
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#">Actions</a>
|
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#">Actions</a>
|
||||||
<div class="dropdown-menu">
|
<div class="dropdown-menu">
|
||||||
<a class="dropdown-item" href="[% c.uri_for(c.controller('JobsetEval').action_for('create_jobset'), [eval.id]) %]">Create a jobset from this evaluation</a>
|
<a class="dropdown-item" [% HTML.attributes(href => c.uri_for(c.controller('JobsetEval').action_for('create_jobset'), [eval.id])) %]>Create a jobset from this evaluation</a>
|
||||||
[% IF totalQueued > 0 %]
|
[% IF totalQueued > 0 %]
|
||||||
<a class="dropdown-item" href="[% c.uri_for(c.controller('JobsetEval').action_for('cancel'), [eval.id]) %]">Cancel all scheduled builds</a>
|
<a class="dropdown-item" [% HTML.attributes(href => c.uri_for(c.controller('JobsetEval').action_for('cancel'), [eval.id])) %]>Cancel all scheduled builds</a>
|
||||||
[% END %]
|
[% END %]
|
||||||
[% IF totalFailed > 0 %]
|
[% IF totalFailed > 0 %]
|
||||||
<a class="dropdown-item" href="[% c.uri_for(c.controller('JobsetEval').action_for('restart_failed'), [eval.id]) %]">Restart all failed builds</a>
|
<a class="dropdown-item" [% HTML.attributes(href => c.uri_for(c.controller('JobsetEval').action_for('restart_failed'), [eval.id])) %]>Restart all failed builds</a>
|
||||||
[% END %]
|
[% END %]
|
||||||
[% IF totalAborted > 0 %]
|
[% IF totalAborted > 0 %]
|
||||||
<a class="dropdown-item" href="[% c.uri_for(c.controller('JobsetEval').action_for('restart_aborted'), [eval.id]) %]">Restart all aborted builds</a>
|
<a class="dropdown-item" [% HTML.attributes(href => c.uri_for(c.controller('JobsetEval').action_for('restart_aborted'), [eval.id])) %]>Restart all aborted builds</a>
|
||||||
[% END %]
|
[% END %]
|
||||||
[% IF totalQueued > 0 %]
|
[% IF totalQueued > 0 %]
|
||||||
<a class="dropdown-item" href="[% c.uri_for(c.controller('JobsetEval').action_for('bump'), [eval.id]) %]">Bump builds to front of queue</a>
|
<a class="dropdown-item" [% HTML.attributes(href => c.uri_for(c.controller('JobsetEval').action_for('bump'), [eval.id])) %]>Bump builds to front of queue</a>
|
||||||
[% END %]
|
[% END %]
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
@@ -99,7 +99,7 @@ c.uri_for(c.controller('JobsetEval').action_for('view'),
|
|||||||
[% INCLUDE renderBuildListBody builds=builds.slice(0, (size > max ? max : size) - 1)
|
[% INCLUDE renderBuildListBody builds=builds.slice(0, (size > max ? max : size) - 1)
|
||||||
hideProjectName=1 hideJobsetName=1 busy=0 %]
|
hideProjectName=1 hideJobsetName=1 busy=0 %]
|
||||||
[% IF size > max; params = c.req.params; params.full = 1 %]
|
[% IF size > max; params = c.req.params; params.full = 1 %]
|
||||||
<tr><td class="centered" colspan="6"><a href="[% c.uri_for(c.controller('JobsetEval').action_for('view'), [eval.id], params) %][% tabname %]"><em>([% size - max %] more builds omitted)</em></a></td></tr>
|
<tr><td class="centered" colspan="6"><a [% HTML.attributes(href => c.uri_for(c.controller('JobsetEval').action_for('view'), [eval.id], params) _ tabname) %]><em>([% size - max %] more builds omitted)</em></a></td></tr>
|
||||||
[% END %]
|
[% END %]
|
||||||
[% INCLUDE renderBuildListFooter %]
|
[% INCLUDE renderBuildListFooter %]
|
||||||
[% END %]
|
[% END %]
|
||||||
@@ -136,7 +136,7 @@ c.uri_for(c.controller('JobsetEval').action_for('view'),
|
|||||||
</tr>
|
</tr>
|
||||||
[% END %]
|
[% END %]
|
||||||
[% IF size > max; params = c.req.params; params.full = 1 %]
|
[% IF size > max; params = c.req.params; params.full = 1 %]
|
||||||
<tr><td class="centered" colspan="2"><a href="[% c.uri_for(c.controller('JobsetEval').action_for('view'), [eval.id], params) %]#tabs-removed"><em>([% size - max %] more jobs omitted)</em></a></td></tr>
|
<tr><td class="centered" colspan="2"><a [% HTML.attributes(c.uri_for(c.controller('JobsetEval').action_for('view'), [eval.id], params) _ "#tabs-removed") %]><em>([% size - max %] more jobs omitted)</em></a></td></tr>
|
||||||
[% END %]
|
[% END %]
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
@@ -52,7 +52,7 @@
|
|||||||
[% FOREACH eval IN evalIds %]
|
[% FOREACH eval IN evalIds %]
|
||||||
<th class="rotate-45">
|
<th class="rotate-45">
|
||||||
<div><span>
|
<div><span>
|
||||||
<a href="[% c.uri_for('/eval' eval) %]">[% INCLUDE renderRelativeDate timestamp=evals.$eval.timestamp %]</a>
|
<a [% HTML.attributes(href => c.uri_for('/eval' eval)) %]>[% INCLUDE renderRelativeDate timestamp=evals.$eval.timestamp %]</a>
|
||||||
</span></div></th>
|
</span></div></th>
|
||||||
[% END %]
|
[% END %]
|
||||||
</tr>
|
</tr>
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th><span [% IF inactiveJobs.$j %]class="muted override-link"[% END %]>[% INCLUDE renderJobName project=project.name jobset=jobset.name job=j %]</span></th>
|
<th><span [% IF inactiveJobs.$j %]class="muted override-link"[% END %]>[% INCLUDE renderJobName project=project.name jobset=jobset.name job=j %]</span></th>
|
||||||
[% FOREACH eval IN evalIds %]
|
[% FOREACH eval IN evalIds %]
|
||||||
<td>[% r = evals.$eval.builds.$j; IF r.id %]<a href="[% c.uri_for('/build' r.id) %]">[% INCLUDE renderBuildStatusIcon size=16 build=r %]</a>[% END %]</td>
|
<td>[% r = evals.$eval.builds.$j; IF r.id %]<a [% HTML.attributes(href => c.uri_for('/build' r.id)) %]>[% INCLUDE renderBuildStatusIcon size=16 build=r %]</a>[% END %]</td>
|
||||||
[% END %]
|
[% END %]
|
||||||
</tr>
|
</tr>
|
||||||
[% END %]
|
[% END %]
|
||||||
|
@@ -188,7 +188,7 @@
|
|||||||
|
|
||||||
<div id="tabs-links" class="tab-pane">
|
<div id="tabs-links" class="tab-pane">
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="[% c.uri_for(c.controller('Jobset').action_for('latest_eval'), c.req.captures) %]">Latest finished evaluation</a></li>
|
<li><a [% HTML.attributes(href => c.uri_for(c.controller('Jobset').action_for('latest_eval'), c.req.captures)) %]>Latest finished evaluation</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
<nav class="navbar navbar-expand-md navbar-light bg-light">
|
<nav class="navbar navbar-expand-md navbar-light bg-light">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<a class="navbar-brand" href="[% c.uri_for(c.controller('Root').action_for('index')) %]">
|
<a class="navbar-brand" [% HTML.attributes(href => c.uri_for(c.controller('Root').action_for('index'))) %]>
|
||||||
[% IF logo == "" %]
|
[% IF logo == "" %]
|
||||||
Hydra
|
Hydra
|
||||||
[% ELSE %]
|
[% ELSE %]
|
||||||
|
@@ -11,14 +11,14 @@
|
|||||||
[% ELSE %]
|
[% ELSE %]
|
||||||
is
|
is
|
||||||
[% END %]
|
[% END %]
|
||||||
the build log (<a href="[% step ? c.uri_for('/build' build.id 'nixlog' step.stepnr, 'raw')
|
the build log (<a [% HTML.attributes(href => step ? c.uri_for('/build' build.id 'nixlog' step.stepnr, 'raw')
|
||||||
: c.uri_for('/build' build.id 'log', 'raw') %]">raw</a>) of derivation <tt>[% IF step; step.drvpath; ELSE; build.drvpath; END %]</tt>.
|
: c.uri_for('/build' build.id 'log', 'raw')) %]>raw</a>) of derivation <tt>[% IF step; step.drvpath; ELSE; build.drvpath; END %]</tt>.
|
||||||
[% IF step && step.machine %]
|
[% IF step && step.machine %]
|
||||||
It was built on <tt>[% step.machine %]</tt>.
|
It was built on <tt>[% step.machine %]</tt>.
|
||||||
[% END %]
|
[% END %]
|
||||||
[% IF tail %]
|
[% IF tail %]
|
||||||
The <a href="[% step ? c.uri_for('/build' build.id 'nixlog' step.stepnr)
|
The <a [% HTML.attributes(href => step ? c.uri_for('/build' build.id 'nixlog' step.stepnr)
|
||||||
: c.uri_for('/build' build.id 'log') %]">full log</a> is also available.
|
: c.uri_for('/build' build.id 'log')) %]>full log</a> is also available.
|
||||||
[% END %]
|
[% END %]
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@@ -76,8 +76,8 @@
|
|||||||
[% idle = 0 %]
|
[% idle = 0 %]
|
||||||
<tr>
|
<tr>
|
||||||
<td><tt>[% INCLUDE renderFullJobName project=step.project jobset=step.jobset job=step.job %]</tt></td>
|
<td><tt>[% INCLUDE renderFullJobName project=step.project jobset=step.jobset job=step.job %]</tt></td>
|
||||||
<td><a href="[% c.uri_for('/build' step.build) %]">[% step.build %]</a></td>
|
<td><a [% HTML.attributes(href => c.uri_for('/build' step.build)) %]>[% step.build %]</a></td>
|
||||||
<td>[% IF step.busy >= 30 %]<a class="row-link" href="[% c.uri_for('/build' step.build 'nixlog' step.stepnr 'tail') %]">[% step.stepnr %]</a>[% ELSE; step.stepnr; END %]</td>
|
<td>[% IF step.busy >= 30 %]<a class="row-link" [% HTML.attributes(href => c.uri_for('/build' step.build 'nixlog' step.stepnr 'tail')) %]>[% step.stepnr %]</a>[% ELSE; step.stepnr; END %]</td>
|
||||||
<td><tt>[% step.drvpath.match('-(.*)').0 %]</tt></td>
|
<td><tt>[% step.drvpath.match('-(.*)').0 %]</tt></td>
|
||||||
<td>[% INCLUDE renderBusyStatus %]</td>
|
<td>[% INCLUDE renderBusyStatus %]</td>
|
||||||
<td style="width: 10em">[% INCLUDE renderDuration duration = curTime - step.starttime %] </td>
|
<td style="width: 10em">[% INCLUDE renderDuration duration = curTime - step.starttime %] </td>
|
||||||
|
@@ -65,7 +65,7 @@
|
|||||||
[% ELSE %]
|
[% ELSE %]
|
||||||
|
|
||||||
<div class="alert alert-warning">Hydra has no projects yet. Please
|
<div class="alert alert-warning">Hydra has no projects yet. Please
|
||||||
<a href="[% c.uri_for(c.controller('Project').action_for('create')) %]">create a project</a>.</div>
|
<a [% HTML.attributes(href => c.uri_for(c.controller('Project').action_for('create'))) %]>create a project</a>.</div>
|
||||||
|
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|
||||||
|
@@ -12,9 +12,9 @@
|
|||||||
is
|
is
|
||||||
[% END %]
|
[% END %]
|
||||||
the output of a RunCommand execution of the command <tt>[% HTML.escape(runcommandlog.command) %]</tt>
|
the output of a RunCommand execution of the command <tt>[% HTML.escape(runcommandlog.command) %]</tt>
|
||||||
on <a href="[% c.uri_for('/build', build.id) %]">Build [% build.id %]</a>.
|
on <a [% HTML.attributes(href => c.uri_for('/build', build.id)) %]>Build [% build.id %]</a>.
|
||||||
[% IF tail %]
|
[% IF tail %]
|
||||||
The <a href="[% c.uri_for('/build', build.id, 'runcommandlog', runcommandlog.uuid) %]">full log</a> is also available.
|
The <a [% HTML.attributes(href => c.uri_for('/build', build.id, 'runcommandlog', runcommandlog.uuid)) %]>full log</a> is also available.
|
||||||
[% END %]
|
[% END %]
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@@ -24,8 +24,8 @@ order of descending finish time.</p>
|
|||||||
<td>[% INCLUDE renderBuildStatusIcon buildstatus=step.status size=16 %]</td>
|
<td>[% INCLUDE renderBuildStatusIcon buildstatus=step.status size=16 %]</td>
|
||||||
<td><tt>[% step.drvpath.match('-(.*).drv').0 %]</tt></td>
|
<td><tt>[% step.drvpath.match('-(.*).drv').0 %]</tt></td>
|
||||||
<td><tt>[% INCLUDE renderFullJobNameOfBuild build=step.build %]</tt></td>
|
<td><tt>[% INCLUDE renderFullJobNameOfBuild build=step.build %]</tt></td>
|
||||||
<td><a href="[% c.uri_for('/build' step.build.id) %]">[% step.build.id %]</a></td>
|
<td><a [% HTML.attributes(href => c.uri_for('/build' step.build.id)) %]>[% step.build.id %]</a></td>
|
||||||
<td><a class="row-link" href="[% c.uri_for('/build' step.build.id 'nixlog' step.stepnr 'tail') %]">[% step.stepnr %]</a></td>
|
<td><a class="row-link" [% HTML.attributes(href => c.uri_for('/build' step.build.id 'nixlog' step.stepnr 'tail')) %]>[% step.stepnr %]</a></td>
|
||||||
<td>[% INCLUDE renderRelativeDate timestamp=step.stoptime %]</td>
|
<td>[% INCLUDE renderRelativeDate timestamp=step.stoptime %]</td>
|
||||||
<td style="width: 10em">[% INCLUDE renderDuration duration = step.stoptime - step.starttime %] </td>
|
<td style="width: 10em">[% INCLUDE renderDuration duration = step.stoptime - step.starttime %] </td>
|
||||||
<td><tt>[% INCLUDE renderMachineName machine=step.machine %]</tt></td>
|
<td><tt>[% INCLUDE renderMachineName machine=step.machine %]</tt></td>
|
||||||
|
@@ -4,14 +4,14 @@
|
|||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
|
||||||
<link href="[% c.uri_for("/static/fontawesome/css/all.css") %]" rel="stylesheet" />
|
<link [% HTML.attributes(href => c.uri_for("/static/fontawesome/css/all.css")) %] rel="stylesheet" />
|
||||||
<script type="text/javascript" src="[% c.uri_for("/static/js/popper.min.js") %]"></script>
|
<script type="text/javascript" src="[% c.uri_for("/static/js/popper.min.js") %]"></script>
|
||||||
<script type="text/javascript" src="[% c.uri_for("/static/bootstrap/js/bootstrap.min.js") %]"></script>
|
<script type="text/javascript" src="[% c.uri_for("/static/bootstrap/js/bootstrap.min.js") %]"></script>
|
||||||
<link href="[% c.uri_for("/static/bootstrap/css/bootstrap.min.css") %]" rel="stylesheet" />
|
<link [% HTML.attributes(href => c.uri_for("/static/bootstrap/css/bootstrap.min.css")) %] rel="stylesheet" />
|
||||||
|
|
||||||
<!-- hydra.css may need to be moved to before boostrap to make the @media rule work. -->
|
<!-- hydra.css may need to be moved to before boostrap to make the @media rule work. -->
|
||||||
<link rel="stylesheet" href="[% c.uri_for("/static/css/hydra.css") %]" type="text/css" />
|
<link rel="stylesheet" [% HTML.attributes(href => c.uri_for("/static/css/hydra.css")) %] type="text/css" />
|
||||||
<link rel="stylesheet" href="[% c.uri_for("/static/css/rotated-th.css") %]" type="text/css" />
|
<link rel="stylesheet" [% HTML.attributes(href => c.uri_for("/static/css/rotated-th.css")) %] type="text/css" />
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.popover { max-width: 40%; }
|
.popover { max-width: 40%; }
|
||||||
@@ -19,6 +19,6 @@
|
|||||||
|
|
||||||
<script type="text/javascript" src="[% c.uri_for("/static/js/bootbox.min.js") %]"></script>
|
<script type="text/javascript" src="[% c.uri_for("/static/js/bootbox.min.js") %]"></script>
|
||||||
|
|
||||||
<link rel="stylesheet" href="[% c.uri_for("/static/css/tree.css") %]" type="text/css" />
|
<link rel="stylesheet" [% HTML.attributes(href => c.uri_for("/static/css/tree.css")) %] type="text/css" />
|
||||||
|
|
||||||
<script type="text/javascript" src="[% c.uri_for("/static/js/common.js") %]"></script>
|
<script type="text/javascript" src="[% c.uri_for("/static/js/common.js") %]"></script>
|
||||||
|
@@ -14,7 +14,7 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
[% FOREACH u IN users %]
|
[% FOREACH u IN users %]
|
||||||
<tr>
|
<tr>
|
||||||
<td><a class="row-link" href="[% c.uri_for(c.controller('User').action_for('edit'), [u.username]) %]">[% HTML.escape(u.username) %]</a></td>
|
<td><a class="row-link" [% HTML.attributes(href => c.uri_for(c.controller('User').action_for('edit'), [u.username])) %]>[% HTML.escape(u.username) %]</a></td>
|
||||||
<td>[% HTML.escape(u.fullname) %]</td>
|
<td>[% HTML.escape(u.fullname) %]</td>
|
||||||
<td>[% HTML.escape(u.emailaddress) %]</td>
|
<td>[% HTML.escape(u.emailaddress) %]</td>
|
||||||
<td>[% FOREACH r IN u.userroles %]<i>[% r.role %]</i> [% END %]</td>
|
<td>[% FOREACH r IN u.userroles %]<i>[% r.role %]</i> [% END %]</td>
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<a class="btn btn-primary" href="[% c.uri_for(c.controller('Root').action_for('register')) %]">
|
<a class="btn btn-primary" [% HTML.attributes(href => c.uri_for(c.controller('Root').action_for('register'))) %]>
|
||||||
<i class="fas fa-plus"></i> Add a new user
|
<i class="fas fa-plus"></i> Add a new user
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user