From 8b3471afb7adf38d31d7ee5220be0930960330aa Mon Sep 17 00:00:00 2001 From: default Date: Sun, 3 Dec 2023 11:43:40 +0100 Subject: [PATCH] Backport from xs. --- html.c | 15 +++++++++------ xs_html.h | 19 +++++++++++++------ xs_version.h | 2 +- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/html.c b/html.c index 3ad3689..ff25acf 100644 --- a/html.c +++ b/html.c @@ -999,12 +999,15 @@ static xs_html *html_button(char *clss, char *label, char *hint) { xs *c = xs_fmt("snac-btn-%s", clss); - return xs_html_sctag("input", - xs_html_attr("type", "submit"), - xs_html_attr("name", "action"), - xs_html_attr("class", c), - xs_html_attr("value", label), - xs_html_attr("title", hint)); + /* use an NULL tag to separate non-css-classed buttons from one another */ + return xs_html_tag(NULL, + xs_html_sctag("input", + xs_html_attr("type", "submit"), + xs_html_attr("name", "action"), + xs_html_attr("class", c), + xs_html_attr("value", label), + xs_html_attr("title", hint)), + xs_html_text("\n")); } diff --git a/xs_html.h b/xs_html.h index bc40267..f644b74 100644 --- a/xs_html.h +++ b/xs_html.h @@ -168,8 +168,11 @@ static xs_html *_xs_html_tag_t(xs_html_type type, char *tag, xs_html *var[]) { xs_html *a = XS_HTML_NEW(); - a->type = type; - a->content = xs_dup(tag); + a->type = type; + + /* a tag can be NULL, to be a kind of 'wrapper' */ + if (tag) + a->content = xs_dup(tag); _xs_html_add(a, var); @@ -197,7 +200,8 @@ void xs_html_render_f(xs_html *h, FILE *f) switch (h->type) { case XS_HTML_TAG: case XS_HTML_SCTAG: - fprintf(f, "<%s", h->content); + if (h->content) + fprintf(f, "<%s", h->content); /* render the attributes */ st = h->f_attr; @@ -209,10 +213,12 @@ void xs_html_render_f(xs_html *h, FILE *f) if (h->type == XS_HTML_SCTAG) { /* self-closing tags should not have subtags */ - fprintf(f, "/>\n"); + if (h->content) + fprintf(f, "/>"); } else { - fprintf(f, ">"); + if (h->content) + fprintf(f, ">"); /* render the subtags */ st = h->f_tag; @@ -222,7 +228,8 @@ void xs_html_render_f(xs_html *h, FILE *f) st = nst; } - fprintf(f, "", h->content); + if (h->content) + fprintf(f, "", h->content); } break; diff --git a/xs_version.h b/xs_version.h index 83dfedc..9a2f401 100644 --- a/xs_version.h +++ b/xs_version.h @@ -1 +1 @@ -/* 8994b1ef8501039ec97a388680ee361138e34554 2023-11-27T11:45:06+01:00 */ +/* b26300d01136fad22ee774d20a7da5b299f30d13 2023-12-03T11:38:09+01:00 */