feat(examples): expose v0 todo field error targets

Add generated field-error targets to the v0 add and rename forms so the canonical todo example shows recoverable typed form feedback end to end instead of emitting errors with no visible target.

req: examples/001

req: canonical_authoring/003
This commit is contained in:
slhx agent
2026-06-22 22:17:21 +02:00
parent 430603ec00
commit 1aa92d8d9d
3 changed files with 10 additions and 1 deletions
+8 -1
View File
@@ -133,7 +133,7 @@ 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-form-error=\"title\"></p>\n </form>\n\n <p data-hemx-slot=\"summary\">");
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-slot=\"summary\">");
write!(buf, "{}", hemplate::HtmlEscape(&self.summary))?;
buf.push_str("</p>\n <p data-hemx-slot=\"notice\">");
write!(buf, "{}", hemplate::HtmlEscape(&self.notice))?;
@@ -620,6 +620,13 @@ mod tests {
.select(&selector(&escaped_markup_selector("b")))
.next()
.is_none());
assert_eq!(
document
.select(&selector("[data-hemx-error-for='title']"))
.count(),
2,
"add and rename forms expose generated field-error targets"
);
}
// req: canonical_authoring/003 req: test/005
@@ -7,6 +7,7 @@
<input name="title" +value="self.title" required="required">
</label>
<button type="submit">Save</button>
<p data-hemx-error-for="title"></p>
</form>
<form data-hemx-handle="delete_todo">
<button type="submit" name="id" +value="self.id">Delete</button>
+1
View File
@@ -2,6 +2,7 @@
<form data-hemx-handle="add_todo" data-hemx-form="new_todo">
<input name="title" required="required">
<button type="submit">Add</button>
<p data-hemx-error-for="title"></p>
</form>
<p data-hemx-slot="summary">{+ self.summary +}</p>
<p data-hemx-slot="notice">{+ self.notice +}</p>