refactor(v0): render todos through heml template
Remove the hand-written push_str renderer for the v0 todos view so the canonical beginner example uses its .heml template for the whole page path, including form validation targets, notices, and keyed rows. req: examples/001 req: canonical_authoring/003
This commit is contained in:
+1
-19
@@ -123,31 +123,13 @@ impl IntoHandlerFailure for AppError {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Hemplate)]
|
||||||
struct Todos {
|
struct Todos {
|
||||||
summary: String,
|
summary: String,
|
||||||
notice: String,
|
notice: String,
|
||||||
rows: Vec<TodoRow>,
|
rows: Vec<TodoRow>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Hemplate for Todos {
|
|
||||||
fn render_into(&self, buf: &mut String) -> Result<(), hemplate::error::HemplateError> {
|
|
||||||
use std::fmt::Write as _;
|
|
||||||
|
|
||||||
buf.push_str("<section data-hemx-root=\"todos\">\n <form data-hemx-handle=\"add_todo\" data-hemx-form=\"new_todo\">\n <label>New todo\n <input name=\"title\" required=\"required\">\n </label>\n <button type=\"submit\">Add</button>\n <p data-hemx-error-for=\"title\"></p>\n </form>\n\n <p data-hemx-error role=\"status\" hidden=\"hidden\"></p>\n\n <p data-hemx-slot=\"summary\">");
|
|
||||||
write!(buf, "{}", hemplate::HtmlEscape(&self.summary))?;
|
|
||||||
buf.push_str("</p>\n <p data-hemx-slot=\"notice\">");
|
|
||||||
write!(buf, "{}", hemplate::HtmlEscape(&self.notice))?;
|
|
||||||
buf.push_str("</p>\n\n <ul data-hemx-slot=\"todo_row\">\n");
|
|
||||||
for row in &self.rows {
|
|
||||||
buf.push_str(" ");
|
|
||||||
row.render_into(buf)?;
|
|
||||||
buf.push('\n');
|
|
||||||
}
|
|
||||||
buf.push_str(" </ul>\n</section>\n");
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Hemplate)]
|
#[derive(Hemplate)]
|
||||||
#[hemplate = "partials"]
|
#[hemplate = "partials"]
|
||||||
struct TodoRow {
|
struct TodoRow {
|
||||||
|
|||||||
Reference in New Issue
Block a user