From 06c6bd1b7b00fad27fe57f41a15d0b5b700f138d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Janne=20He=C3=9F?=
Date: Sat, 2 Aug 2025 16:56:04 +0200
Subject: [PATCH] templates: Use HTML.attributes for all links
---
src/root/build.tt | 30 +++++++++++------------
src/root/channel-contents.tt | 2 +-
src/root/common.tt | 42 ++++++++++++++++-----------------
src/root/dashboard.tt | 2 +-
src/root/deps.tt | 2 +-
src/root/job.tt | 12 +++++-----
src/root/jobset-channels-tab.tt | 6 ++---
src/root/jobset-eval.tt | 20 ++++++++--------
src/root/jobset-jobs-tab.tt | 4 ++--
src/root/jobset.tt | 2 +-
src/root/layout.tt | 2 +-
src/root/log.tt | 8 +++----
src/root/machine-status.tt | 4 ++--
src/root/overview.tt | 2 +-
src/root/runcommand-log.tt | 4 ++--
src/root/steps.tt | 4 ++--
src/root/style.tt | 10 ++++----
src/root/users.tt | 4 ++--
18 files changed, 80 insertions(+), 80 deletions(-)
diff --git a/src/root/build.tt b/src/root/build.tt
index cf8e454d..818763bd 100644
--- a/src/root/build.tt
+++ b/src/root/build.tt
@@ -112,16 +112,16 @@ END;
[% IF c.user_exists %]
[% IF available %]
[% IF build.keep %]
- Unkeep
+ c.uri_for('/build' build.id 'keep' 0)) %]>Unkeep
[% ELSE %]
- Keep
+ c.uri_for('/build' build.id 'keep' 1)) %]>Keep
[% END %]
[% END %]
[% IF build.finished %]
- Restart
+ c.uri_for('/build' build.id 'restart')) %]>Restart
[% ELSE %]
- Cancel
- Bump up
+ c.uri_for('/build' build.id 'cancel')) %]>Cancel
+ c.uri_for('/build' build.id 'bump')) %]>Bump up
[% END %]
[% END %]
@@ -197,8 +197,8 @@ END;
Part of:
- evaluation [% HTML.escape(eval.id) %]
- [% IF nrEvals > 1 +%] (and [% nrEvals - 1 %] others )[% END %]
+ c.uri_for(c.controller('JobsetEval').action_for('view'), [eval.id])) %]>evaluation [% HTML.escape(eval.id) %]
+ [% IF nrEvals > 1 +%] (and c.uri_for('/build' build.id 'evals')) %]>[% nrEvals - 1 %] others )[% END %]
[% END %]
@@ -226,9 +226,9 @@ END;
Logfile:
[% actualLog = cachedBuildStep ? c.uri_for('/build' cachedBuild.id 'nixlog' cachedBuildStep.stepnr) : c.uri_for('/build' build.id 'log') %]
- pretty
- raw
- tail
+ actualLog) %]>pretty
+ actualLog _ "/raw") %]>raw
+ actualLog _ "/tail") %]>tail
[% END %]
@@ -376,14 +376,14 @@ END;
Closure size:
[% mibs(build.closuresize / (1024 * 1024)) %] MiB
- (history )
+ ( chartsURL) %]>history )
[% END %]
[% IF build.finished && build.closuresize %]
Output size:
[% mibs(build.size / (1024 * 1024)) %] MiB
- (history )
+ ( chartsURL) %]>history )
[% END %]
[% IF build.finished && build.buildproducts %]
@@ -532,9 +532,9 @@ END;
[% IF runcommandlog.uuid != undef %]
[% runLog = c.uri_for('/build', build.id, 'runcommandlog', runcommandlog.uuid) %]
[% END %]
diff --git a/src/root/channel-contents.tt b/src/root/channel-contents.tt
index 083d6ae5..ff79dd0f 100644
--- a/src/root/channel-contents.tt
+++ b/src/root/channel-contents.tt
@@ -49,7 +49,7 @@ installed, you can subscribe to this channel by once executing
[% b = pkg.build %]
- [% b.id %]
+ c.uri_for('/build' b.id)) %]>[% b.id %]
[% b.get_column('releasename') || b.nixname %]
[% b.system %]
diff --git a/src/root/common.tt b/src/root/common.tt
index 7a93cc95..beee86ca 100644
--- a/src/root/common.tt
+++ b/src/root/common.tt
@@ -55,17 +55,17 @@ BLOCK renderRelativeDate %]
[% END;
BLOCK renderProjectName %]
-[% project %]
+ c.uri_for('/project' project)) %]>[% project %]
[% END;
BLOCK renderJobsetName %]
-[% jobset %]
+ c.uri_for('/jobset' project jobset)) %]>[% jobset %]
[% END;
BLOCK renderJobName %]
-[% job %]
+ c.uri_for('/job' project jobset job)) %]>[% job %]
[% END;
@@ -140,10 +140,10 @@ BLOCK renderBuildListBody;
[% IF showSchedulingInfo %]
[% IF busy %]Started [% ELSE %]Queued [% END %]
[% END %]
- [% build.id %]
+ link) %]>[% build.id %]
[% IF !hideJobName %]
- [% IF !hideJobsetName %][%build.jobset.get_column("project")%]:[%build.jobset.get_column("name")%]:[% END %][%build.get_column("job")%]
+ link) %]>[% IF !hideJobsetName %][%build.jobset.get_column("project")%]:[%build.jobset.get_column("name")%]:[% END %][%build.get_column("job")%]
[% IF showStepName %]
[% INCLUDE renderDrvInfo step=build.buildsteps releasename=build.nixname %]
[% END %]
@@ -158,7 +158,7 @@ BLOCK renderBuildListBody;
[% END;
IF linkToAll %]
- More...
+ linkToAll) %]>More...
[% END;
END;
@@ -176,7 +176,7 @@ BLOCK renderBuildList;
END;
-BLOCK renderLink %][% title %] [% END;
+BLOCK renderLink %] uri) %]>[% title %] [% END;
BLOCK maybeLink;
@@ -216,12 +216,12 @@ BLOCK editString; %]
BLOCK renderFullBuildLink;
- INCLUDE renderFullJobNameOfBuild build=build %] build [% build.id %] [%
+ INCLUDE renderFullJobNameOfBuild build=build %] c.uri_for('/build' build.id)) %]>build [% build.id %] [%
END;
BLOCK renderBuildIdLink; %]
-build [% id %]
+ c.uri_for('/build' id)) %]>build [% id %]
[% END;
@@ -320,7 +320,7 @@ END;
BLOCK renderShortInputValue;
IF input.type == "build" || input.type == "sysbuild" %]
- [% input.dependency.id %]
+ c.uri_for('/build' input.dependency.id)) %]>[% input.dependency.id %]
[% ELSIF input.type == "string" %]
"[% HTML.escape(input.value) %]"
[% ELSIF input.type == "nix" || input.type == "boolean" %]
@@ -338,7 +338,7 @@ BLOCK renderDiffUri;
url = bi1.uri;
path = url.replace(base, '');
IF url.match(base) %]
- [% contents %]
+ m.uri.replace('_path_', path).replace('_1_', bi1.revision).replace('_2_', bi2.revision)) %]>[% contents %]
[% nouri = 0;
END;
END;
@@ -347,13 +347,13 @@ BLOCK renderDiffUri;
url = res.0;
branch = res.1;
IF bi1.type == "hg" || bi1.type == "git" %]
- c.uri_for('/api/scmdiff', {
uri = url,
rev1 = bi1.revision,
rev2 = bi2.revision,
type = bi1.type,
branch = branch
- })) %]">[% contents %]
+ })) %]>[% contents %]
[% ELSE;
contents;
END;
@@ -443,10 +443,10 @@ BLOCK renderInputDiff; %]
BLOCK renderPager %]
[% END;
@@ -459,7 +459,7 @@ BLOCK renderShortEvalInput;
[% ELSIF input.type == "hg" %]
[% input.revision.substr(0, 12) %]
[% ELSIF input.type == "build" || input.type == "sysbuild" %]
- [% input.get_column('dependency') %]
+ c.uri_for('/build' input.get_column('dependency'))) %]>[% input.get_column('dependency') %]
[% ELSE %]
[% input.revision %]
[% END;
@@ -498,7 +498,7 @@ BLOCK renderEvals %]
eval = e.eval;
link = c.uri_for(c.controller('JobsetEval').action_for('view'), [eval.id]) %]
- [% eval.id %]
+ link) %]>[% eval.id %]
[% IF !jobset && !build %]
[% INCLUDE renderFullJobsetName project=eval.jobset.project.name jobset=eval.jobset.name %]
[% END %]
@@ -540,7 +540,7 @@ BLOCK renderEvals %]
[% END;
IF linkToAll %]
- More...
+ linkToAll) %]>More...
[% END %]
@@ -548,7 +548,7 @@ BLOCK renderEvals %]
BLOCK renderLogLinks %]
-(log , raw , tail )
+( url) %]>log , "$url/raw") %]>raw , "$url/tail") %]>tail )
[% END;
diff --git a/src/root/dashboard.tt b/src/root/dashboard.tt
index 06b8de15..0daf3dad 100644
--- a/src/root/dashboard.tt
+++ b/src/root/dashboard.tt
@@ -24,7 +24,7 @@
[% INCLUDE renderFullJobName project=j.job.get_column('project') jobset=j.job.get_column('jobset') job=j.job.job %]
[% FOREACH b IN j.builds %]
- [% INCLUDE renderBuildStatusIcon size=16 build=b %]
+ c.uri_for('/build' b.id)) %]>[% INCLUDE renderBuildStatusIcon size=16 build=b %]
[% END %]
[% END %]
diff --git a/src/root/deps.tt b/src/root/deps.tt
index 6daa9725..b9f3ba7e 100644
--- a/src/root/deps.tt
+++ b/src/root/deps.tt
@@ -11,7 +11,7 @@
[% END %]
[% IF node.buildStep %]
- [% node.name %] [%
+ c.uri_for('/build' node.buildStep.get_column('build'))) %]>[% node.name %] [%
IF buildStepLogExists(node.buildStep);
INCLUDE renderLogLinks url=c.uri_for('/build' node.buildStep.get_column('build') 'nixlog' node.buildStep.stepnr);
END %]
diff --git a/src/root/job.tt b/src/root/job.tt
index 7e475f69..acb874a3 100644
--- a/src/root/job.tt
+++ b/src/root/job.tt
@@ -10,8 +10,8 @@
[% IF !jobExists(jobset, job) %]
This job is not a member of the
latest evaluation of its jobset. This means it was
+[% HTML.attributes(href => c.uri_for('/jobset' project.name jobset.name
+'evals')) %]>latest evaluation of its jobset. This means it was
removed or had an evaluation error.
[% END %]
@@ -58,7 +58,7 @@ removed or had an evaluation error.
[% agg_ = aggregates.$agg %]
[% END %]
@@ -70,7 +70,7 @@ removed or had an evaluation error.
[% FOREACH agg IN aggs %]
[% r = aggregates.$agg.constituents.$j; IF r.id %]
-
+ c.uri_for('/build' r.id)) %]>
[% INCLUDE renderBuildStatusIcon size=16 build=r %]
[% END %]
@@ -89,8 +89,8 @@ removed or had an evaluation error.
diff --git a/src/root/jobset-channels-tab.tt b/src/root/jobset-channels-tab.tt
index 692f2682..3fa4ba69 100644
--- a/src/root/jobset-channels-tab.tt
+++ b/src/root/jobset-channels-tab.tt
@@ -14,7 +14,7 @@
[% FOREACH eval IN evalIds %]
[% END %]
@@ -22,9 +22,9 @@
[% FOREACH chan IN channels-%]
- [% chan %]
+ c.uri_for('/channel/custom' project.name jobset.name chan)) %]>[% chan %]
[% FOREACH eval IN evalIds %]
- [% r = evals.$eval.builds.$chan; IF r.id %][% INCLUDE renderBuildStatusIcon size=16 build=r %] [% END %]
+ [% r = evals.$eval.builds.$chan; IF r.id %] c.uri_for('/build' r.id)) %]>[% INCLUDE renderBuildStatusIcon size=16 build=r %] [% END %]
[% END %]
[% END %]
diff --git a/src/root/jobset-eval.tt b/src/root/jobset-eval.tt
index 11965ce2..bd29525d 100644
--- a/src/root/jobset-eval.tt
+++ b/src/root/jobset-eval.tt
@@ -27,9 +27,9 @@ eval.checkouttime %]s and evaluation took [% eval.evaltime %]s.
[% IF otherEval %]
Comparisons are relative to [% INCLUDE renderFullJobsetName
-project=otherEval.jobset.project.name jobset=otherEval.jobset.name %] evaluation [% otherEval.id %] .
+project=otherEval.jobset.project.name jobset=otherEval.jobset.name %] evaluation c.uri_for(c.controller('JobsetEval').action_for('view'),
+[otherEval.id])) %]>[% otherEval.id %] .
[% END %]
diff --git a/src/root/jobset-jobs-tab.tt b/src/root/jobset-jobs-tab.tt
index 707d329e..2785e802 100644
--- a/src/root/jobset-jobs-tab.tt
+++ b/src/root/jobset-jobs-tab.tt
@@ -52,7 +52,7 @@
[% FOREACH eval IN evalIds %]
[% END %]
@@ -62,7 +62,7 @@
[% INCLUDE renderJobName project=project.name jobset=jobset.name job=j %]
[% FOREACH eval IN evalIds %]
- [% r = evals.$eval.builds.$j; IF r.id %][% INCLUDE renderBuildStatusIcon size=16 build=r %] [% END %]
+ [% r = evals.$eval.builds.$j; IF r.id %] c.uri_for('/build' r.id)) %]>[% INCLUDE renderBuildStatusIcon size=16 build=r %] [% END %]
[% END %]
[% END %]
diff --git a/src/root/jobset.tt b/src/root/jobset.tt
index 3e594756..1e570cf3 100644
--- a/src/root/jobset.tt
+++ b/src/root/jobset.tt
@@ -188,7 +188,7 @@
diff --git a/src/root/layout.tt b/src/root/layout.tt
index b520b455..37f4cb7f 100644
--- a/src/root/layout.tt
+++ b/src/root/layout.tt
@@ -24,7 +24,7 @@
-
+ c.uri_for(c.controller('Root').action_for('index'))) %]>
[% IF logo == "" %]
Hydra
[% ELSE %]
diff --git a/src/root/log.tt b/src/root/log.tt
index 1c5fd3b5..ffb2df36 100644
--- a/src/root/log.tt
+++ b/src/root/log.tt
@@ -11,14 +11,14 @@
[% ELSE %]
is
[% END %]
- the build log ( raw ) of derivation
[% IF step; step.drvpath; ELSE; build.drvpath; END %] .
+ the build log (
step ? c.uri_for('/build' build.id 'nixlog' step.stepnr, 'raw')
+ : c.uri_for('/build' build.id 'log', 'raw')) %]>raw ) of derivation
[% IF step; step.drvpath; ELSE; build.drvpath; END %] .
[% IF step && step.machine %]
It was built on
[% step.machine %] .
[% END %]
[% IF tail %]
- The
full log is also available.
+ The
step ? c.uri_for('/build' build.id 'nixlog' step.stepnr)
+ : c.uri_for('/build' build.id 'log')) %]>full log is also available.
[% END %]
diff --git a/src/root/machine-status.tt b/src/root/machine-status.tt
index cf8f960c..d1c2a6cd 100644
--- a/src/root/machine-status.tt
+++ b/src/root/machine-status.tt
@@ -76,8 +76,8 @@
[% idle = 0 %]
[% INCLUDE renderFullJobName project=step.project jobset=step.jobset job=step.job %]
- [% step.build %]
- [% IF step.busy >= 30 %][% step.stepnr %] [% ELSE; step.stepnr; END %]
+ c.uri_for('/build' step.build)) %]>[% step.build %]
+ [% IF step.busy >= 30 %] c.uri_for('/build' step.build 'nixlog' step.stepnr 'tail')) %]>[% step.stepnr %] [% ELSE; step.stepnr; END %]
[% step.drvpath.match('-(.*)').0 %]
[% INCLUDE renderBusyStatus %]
[% INCLUDE renderDuration duration = curTime - step.starttime %]
diff --git a/src/root/overview.tt b/src/root/overview.tt
index 6042c7bf..53c741e1 100644
--- a/src/root/overview.tt
+++ b/src/root/overview.tt
@@ -65,7 +65,7 @@
[% ELSE %]
+ c.uri_for(c.controller('Project').action_for('create'))) %]>create a project .
[% END %]
diff --git a/src/root/runcommand-log.tt b/src/root/runcommand-log.tt
index b937a373..d6fc0b70 100644
--- a/src/root/runcommand-log.tt
+++ b/src/root/runcommand-log.tt
@@ -12,9 +12,9 @@
is
[% END %]
the output of a RunCommand execution of the command [% HTML.escape(runcommandlog.command) %]
- on Build [% build.id %] .
+ on c.uri_for('/build', build.id)) %]>Build [% build.id %] .
[% IF tail %]
- The full log is also available.
+ The c.uri_for('/build', build.id, 'runcommandlog', runcommandlog.uuid)) %]>full log is also available.
[% END %]
diff --git a/src/root/steps.tt b/src/root/steps.tt
index 669ec552..4de1a8d3 100644
--- a/src/root/steps.tt
+++ b/src/root/steps.tt
@@ -24,8 +24,8 @@ order of descending finish time.
[% INCLUDE renderBuildStatusIcon buildstatus=step.status size=16 %]
[% step.drvpath.match('-(.*).drv').0 %]
[% INCLUDE renderFullJobNameOfBuild build=step.build %]
- [% step.build.id %]
- [% step.stepnr %]
+ c.uri_for('/build' step.build.id)) %]>[% step.build.id %]
+ c.uri_for('/build' step.build.id 'nixlog' step.stepnr 'tail')) %]>[% step.stepnr %]
[% INCLUDE renderRelativeDate timestamp=step.stoptime %]
[% INCLUDE renderDuration duration = step.stoptime - step.starttime %]
[% INCLUDE renderMachineName machine=step.machine %]
diff --git a/src/root/style.tt b/src/root/style.tt
index 4094b7bc..fa977afe 100644
--- a/src/root/style.tt
+++ b/src/root/style.tt
@@ -4,14 +4,14 @@
-
+ c.uri_for("/static/fontawesome/css/all.css")) %] rel="stylesheet" />
-
+ c.uri_for("/static/bootstrap/css/bootstrap.min.css")) %] rel="stylesheet" />
-
-
+ c.uri_for("/static/css/hydra.css")) %] type="text/css" />
+ c.uri_for("/static/css/rotated-th.css")) %] type="text/css" />