refactor(web): common template for index pages of tvl and atward
Use simple string interpolation based approach to templating and allow changing the main body, the title and to inject extra HTML into the head element. Additionally we can use `https://tvl.fyi/` instead of `/` when referring to assets. One limitation currently is that the template only works for index pages (it link to self using `href="/"`), but this should be easy to fix. For atward, instead of using the `onload` attribute of `body`, we now register an event listener in JavaScript which makes the template code less complicated. When building the derivation the template is rendered to HTML and injected into the source. Change-Id: I2ea0c5bf5f6286e781285ade7751a348bab3bdc8 Reviewed-on: https://cl.tvl.fyi/c/depot/+/3112 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
This commit is contained in:
parent
a989a91f9f
commit
040416b3eb
7 changed files with 216 additions and 152 deletions
50
web/atward/build.rs
Normal file
50
web/atward/build.rs
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
//! Build script that can be used outside of Nix builds to inject the
|
||||
//! ATWARD_INDEX_HTML variable when building in development mode.
|
||||
//!
|
||||
//! Note that this script assumes that atward is in a checkout of the
|
||||
//! TVL depot.
|
||||
|
||||
use std::process::Command;
|
||||
|
||||
static ATWARD_INDEX_HTML: &str = "ATWARD_INDEX_HTML";
|
||||
static ERROR_MESSAGE: &str = r#"Failed to build index page.
|
||||
|
||||
When building during development, atward expects to be in a checkout
|
||||
of the TVL depot. This is required to automatically build the index
|
||||
page that is needed at compile time.
|
||||
|
||||
As atward can not automatically detect the location of the page,
|
||||
you must set the `ATWARD_INDEX_HTML` environment variable to the
|
||||
right path.
|
||||
|
||||
The expected page is build using the files in //web/atward/indexHtml
|
||||
in the depot."#;
|
||||
|
||||
fn main() {
|
||||
// Do nothing if the variable is already set (e.g. via Nix)
|
||||
if let Ok(_) = std::env::var(ATWARD_INDEX_HTML) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Otherwise ask Nix to build it and inject the result.
|
||||
let output = Command::new("nix-build")
|
||||
.arg("-A").arg("web.atward.indexHtml")
|
||||
// ... assuming atward is at //web/atward ...
|
||||
.arg("../..")
|
||||
.output()
|
||||
.expect(ERROR_MESSAGE);
|
||||
|
||||
if !output.status.success() {
|
||||
eprintln!("{}\nNix output: {}", ERROR_MESSAGE, String::from_utf8_lossy(&output.stderr));
|
||||
return;
|
||||
}
|
||||
|
||||
let out_path = String::from_utf8(output.stdout)
|
||||
.expect("Nix returned invalid output after building index page");
|
||||
|
||||
// Return an instruction to Cargo that will set the environment
|
||||
// variable during rustc calls.
|
||||
//
|
||||
// https://doc.rust-lang.org/cargo/reference/build-scripts.html#cargorustc-envvarvalue
|
||||
println!("cargo:rustc-env={}={}", ATWARD_INDEX_HTML, out_path.trim());
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue