feat(build): lower static fragments as safe html
Add a generated static_fragment helper for include_str!-style prototype fragments and use it in the v0 page assembly path so static lowered .heml no longer needs repeated SafeHtml::trusted plumbing. req: dx/006 req: html_safety/001 req: html_safety/002 req: component/003
This commit is contained in:
@@ -525,6 +525,9 @@ impl Resources {
|
||||
out.push_str(&format!("__slhx_lower_html(html.as_ref(), &{table_name})\n"));
|
||||
out.push_str(&format!("{pad}}}\n\n"));
|
||||
out.push_str(&format!("{pad}pub fn lower_html(html: impl ::std::convert::AsRef<str>) -> ::std::string::String {{ lower(html) }}\n\n"));
|
||||
out.push_str(&format!("{pad}pub fn static_fragment(html: &'static str) -> ::slhx::SafeHtml {{\n"));
|
||||
out.push_str(&format!("{pad} ::slhx::SafeHtml::trusted(lower(html))\n"));
|
||||
out.push_str(&format!("{pad}}}\n\n"));
|
||||
out.push_str(&format!("{pad}pub fn render(view: &impl ::hemplate::Hemplate) -> ::slhx::SafeHtml {{\n"));
|
||||
out.push_str(&format!("{pad} let mut html = ::std::string::String::new();\n"));
|
||||
out.push_str(&format!("{pad} ::hemplate::Hemplate::render_into(view, &mut html).expect(\"slhx hemplate view renders\");\n"));
|
||||
@@ -1301,6 +1304,7 @@ mod tests {
|
||||
assert!(generated.contains("pub const ALL_IDS"));
|
||||
assert!(generated.contains("pub fn lower(html: impl ::std::convert::AsRef<str>) -> ::std::string::String"));
|
||||
assert!(generated.contains("pub fn lower_html"));
|
||||
assert!(generated.contains("pub fn static_fragment(html: &'static str) -> ::slhx::SafeHtml"));
|
||||
assert!(generated.contains("pub fn render(view: &impl ::hemplate::Hemplate) -> ::slhx::SafeHtml"));
|
||||
assert!(generated.contains("pub fn render_html(view: &impl ::hemplate::Hemplate) -> ::slhx::SafeHtml"));
|
||||
assert!(generated.contains("data-slhx-slot"));
|
||||
@@ -1369,12 +1373,14 @@ mod tests {
|
||||
assert!(!generated.contains("\n#[allow(non_upper_case_globals)]\npub mod slots"));
|
||||
assert!(generated.contains("\npub fn lower(html: impl ::std::convert::AsRef<str>) -> ::std::string::String"));
|
||||
assert!(generated.contains("\npub fn lower_html"));
|
||||
assert!(generated.contains("\npub fn static_fragment(html: &'static str) -> ::slhx::SafeHtml"));
|
||||
assert!(generated.contains("\npub fn render(view: &impl ::hemplate::Hemplate) -> ::slhx::SafeHtml"));
|
||||
assert!(generated.contains("\npub fn render_html(view: &impl ::hemplate::Hemplate) -> ::slhx::SafeHtml"));
|
||||
assert!(generated.contains("pub mod todo"));
|
||||
assert!(generated.contains(" pub const COMPONENT: ::slhx::ComponentRef = ::slhx::ComponentRef::new(\"todo\")"));
|
||||
assert!(generated.contains(" pub mod slots"));
|
||||
assert!(generated.contains(" pub fn lower_html"));
|
||||
assert!(generated.contains(" pub fn static_fragment(html: &'static str) -> ::slhx::SafeHtml"));
|
||||
|
||||
let _ = std::fs::remove_dir_all(&base);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user