Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ clap = "4.6.1"
compile-fmt = "0.1.0"
doc-comment = "0.3.4"
font-subset = "0.1.0"
handlebars = "6.4.0"
handlebars = "6.4.1"
humantime = "2.3.0"
os_pipe = "1.2.3"
portable-pty = "0.8.1" # FIXME: portable-pty 0.9 is seemingly broken on Windows
Expand Down
6 changes: 6 additions & 0 deletions crates/term-transcript/src/svg/common.handlebars
Original file line number Diff line number Diff line change
Expand Up @@ -243,3 +243,9 @@
{{~round (mul line_height const.FONT_SIZE) digits=1~}}
{{~/if~}}
{{/inline~}}

{{!
Include main rendering logic. We need this roundabout construction in order for common inlines to be available
to the format-specific rendering logic.
}}
{{~>main~}}
8 changes: 4 additions & 4 deletions crates/term-transcript/src/svg/default.svg.handlebars
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
{{! Load common helpers }}
{{>_helpers~}}

{{! Root template }}
{{~#*inline "root"}}
<!-- Created with {{{creator.name}}} v{{{creator.version}}} ({{{creator.repo}}}) -->
Expand Down Expand Up @@ -216,7 +213,7 @@
{{/scope}}
{{/inline~}}

{{! Main logic }}
{{~#*inline "main"~}}
{{#scope
content_height=0
scroll_animation=null
Expand Down Expand Up @@ -254,3 +251,6 @@
{{~/if~}}
{{>root (splat_vars this)~}} {{! <-- All rendering happens here }}
{{/scope}}
{{~/inline~}}

{{~>_common~}}
2 changes: 1 addition & 1 deletion crates/term-transcript/src/svg/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ impl Template {
register_helpers(&mut handlebars);
handlebars.register_template(MAIN_TEMPLATE_NAME, template);
let helpers = HandlebarsTemplate::compile(COMMON_HELPERS).unwrap();
handlebars.register_template("_helpers", helpers);
handlebars.register_template("_common", helpers);
Self {
options: options.into_inner(),
handlebars,
Expand Down
8 changes: 4 additions & 4 deletions crates/term-transcript/src/svg/pure.svg.handlebars
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
{{! Load common helpers }}
{{>_helpers~}}

{{! Renders `class` and/or `style` attributes for a background SVG span }}
{{~#*inline "svg_bg_tspan_attrs"}}
{{~#scope bg=bg classes="" styles=""}}
Expand Down Expand Up @@ -317,7 +314,7 @@
{{~/scope~}}
{{~/inline~}}

{{! Main logic }}
{{~#*inline "main"~}}
{{#scope
content_height=0
scroll_animation=null
Expand Down Expand Up @@ -392,3 +389,6 @@
{{~/if~}}
{{>root (splat_vars this)~}} {{! <-- All rendering happens here }}
{{/scope}}
{{~/inline~}}

{{~>_common~}}
44 changes: 29 additions & 15 deletions crates/term-transcript/src/svg/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1011,6 +1011,12 @@ fn embedding_font(pure_svg: bool, with_line_numbers: bool) {
}
}

const HTML_SPAN_TEMPLATE: &str = r#"
{{~#>_helpers~}}
{{~#*inline "main"~}}{{>html_span}}{{~/inline~}}
{{~/_helpers~}}
"#;

#[test]
fn rendering_html_span() {
let helpers = HandlebarsTemplate::compile(COMMON_HELPERS).unwrap();
Expand All @@ -1022,7 +1028,7 @@ fn rendering_html_span() {
text: "Test",
});
let rendered = handlebars
.render_template("{{>_helpers}}\n{{>html_span}}", &data)
.render_template(HTML_SPAN_TEMPLATE, &data)
.unwrap();
assert_eq!(rendered, "Test");

Expand All @@ -1038,7 +1044,7 @@ fn rendering_html_span() {
text: "Test",
});
let rendered = handlebars
.render_template("{{>_helpers}}\n{{>html_span}}", &data)
.render_template(HTML_SPAN_TEMPLATE, &data)
.unwrap();
assert_eq!(
rendered,
Expand All @@ -1052,7 +1058,7 @@ fn rendering_html_span() {
text: "Test",
});
let rendered = handlebars
.render_template("{{>_helpers}}\n{{>html_span}}", &data)
.render_template(HTML_SPAN_TEMPLATE, &data)
.unwrap();
assert_eq!(rendered, "<span class=\"bold fg2\">Test</span>");
}
Expand All @@ -1072,19 +1078,19 @@ fn rendering_inverted_html_span() {
text: "Test",
};
let rendered = handlebars
.render_template("{{>_helpers}}\n{{>html_span}}", &data)
.render_template(HTML_SPAN_TEMPLATE, &data)
.unwrap();
assert_eq!(rendered, r#"<span class="inv fg-none bg-none">Test</span>"#);

data.style.fg = Some(SerdeColor::Index(5));
let rendered = handlebars
.render_template("{{>_helpers}}\n{{>html_span}}", &data)
.render_template(HTML_SPAN_TEMPLATE, &data)
.unwrap();
assert_eq!(rendered, r#"<span class="inv fg-none bg5">Test</span>"#);

data.style.bg = Some(SerdeColor::Rgb(RgbColor(0xc0, 0xff, 0xee)));
let rendered = handlebars
.render_template("{{>_helpers}}\n{{>html_span}}", &data)
.render_template(HTML_SPAN_TEMPLATE, &data)
.unwrap();
assert_eq!(
rendered,
Expand All @@ -1108,7 +1114,7 @@ fn rendering_blinking_html_span() {
text: "Test",
};
let rendered = handlebars
.render_template("{{>_helpers}}\n{{>html_span}}", &data)
.render_template(HTML_SPAN_TEMPLATE, &data)
.unwrap();
assert_eq!(
rendered,
Expand All @@ -1132,14 +1138,22 @@ fn rendering_dimmed_html_span() {
text: "Test",
};
let rendered = handlebars
.render_template("{{>_helpers}}\n{{>html_span}}", &data)
.render_template(HTML_SPAN_TEMPLATE, &data)
.unwrap();
assert_eq!(
rendered,
r#"<span class="strike dimmed"><span>Test</span></span>"#
);
}

const SVG_SPAN_TEMPLATE: &str = r#"
{{~#>_helpers~}}
{{~#*inline "main"~}}
{{>svg_tspan_attrs}}
{{~/inline~}}
{{~/_helpers~}}
"#;

#[test]
fn rendering_svg_tspan() {
let helpers = HandlebarsTemplate::compile(COMMON_HELPERS).unwrap();
Expand All @@ -1151,7 +1165,7 @@ fn rendering_svg_tspan() {
text: "Test",
});
let rendered = handlebars
.render_template("{{>_helpers}}\n{{>svg_tspan_attrs}}", &data)
.render_template(SVG_SPAN_TEMPLATE, &data)
.unwrap();
assert_eq!(rendered, "");

Expand All @@ -1167,7 +1181,7 @@ fn rendering_svg_tspan() {
text: "Test",
});
let rendered = handlebars
.render_template("{{>_helpers}}\n{{>svg_tspan_attrs}}", &data)
.render_template(SVG_SPAN_TEMPLATE, &data)
.unwrap();
assert_eq!(rendered, " class=\"bold underline fg2 bg#cfc\"");

Expand All @@ -1179,7 +1193,7 @@ fn rendering_svg_tspan() {
text: "Test",
});
let rendered = handlebars
.render_template("{{>_helpers}}\n{{>svg_tspan_attrs}}", &data)
.render_template(SVG_SPAN_TEMPLATE, &data)
.unwrap();
assert_eq!(rendered, " class=\"bold dimmed fg2 bg0\"");

Expand All @@ -1191,7 +1205,7 @@ fn rendering_svg_tspan() {
text: "Test",
});
let rendered = handlebars
.render_template("{{>_helpers}}\n{{>svg_tspan_attrs}}", &data)
.render_template(SVG_SPAN_TEMPLATE, &data)
.unwrap();
assert_eq!(rendered, " class=\"bold\" style=\"fill: #c0ffee;\"");
}
Expand All @@ -1211,19 +1225,19 @@ fn rendering_inverted_svg_tspan() {
text: "Test",
};
let rendered = handlebars
.render_template("{{>_helpers}}\n{{>svg_tspan_attrs}}", &data)
.render_template(SVG_SPAN_TEMPLATE, &data)
.unwrap();
assert_eq!(rendered, r#" class="inv fg-none bg-none""#);

data.style.fg = Some(SerdeColor::Index(5));
let rendered = handlebars
.render_template("{{>_helpers}}\n{{>svg_tspan_attrs}}", &data)
.render_template(SVG_SPAN_TEMPLATE, &data)
.unwrap();
assert_eq!(rendered, r#" class="inv fg-none bg5""#);

data.style.bg = Some(SerdeColor::Rgb(RgbColor(0xc0, 0xff, 0xee)));
let rendered = handlebars
.render_template("{{>_helpers}}\n{{>svg_tspan_attrs}}", &data)
.render_template(SVG_SPAN_TEMPLATE, &data)
.unwrap();
assert_eq!(rendered, r#" class="inv bg5" style="fill: #c0ffee;""#);
}
7 changes: 5 additions & 2 deletions docs/src/assets/custom.html.handlebars
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
Example of a custom Handlebars template for use with `term-transcript`.
This template renders an HTML document with collapsible interaction sections.
}}
{{! Import misc helpers to the scope. }}
{{>_helpers}}
{{! CSS definitions: colors. }}
{{~#*inline "styles_colors"}}
:root {
Expand Down Expand Up @@ -77,6 +75,7 @@
</style>
{{/inline~}}

{{~#*inline "main"~}}
<!DOCTYPE html>
<html lang="en">
<head>
Expand Down Expand Up @@ -130,3 +129,7 @@
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js" integrity="sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13" crossorigin="anonymous"></script>
</body>
</html>
{{/inline~}}

{{! Import the main template which will automatically pick up the `main` partial defined above. }}
{{~>_common~}}
4 changes: 4 additions & 0 deletions e2e-tests/rainbow/tests/integration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,10 @@ fn snapshot_with_custom_template() -> anyhow::Result<()> {
Template::custom(template, template_options.validated()?).render(&transcript, &mut buffer)?;
let buffer = String::from_utf8(buffer)?;
assert!(buffer.starts_with("<!DOCTYPE html>"), "{buffer}");
assert!(
buffer.ends_with('\n') && !buffer.ends_with("\n\n"),
"{buffer}<<EOF>>"
);
Ok(())
}

Expand Down
Loading