Browse Source

Backport from xs.

default 1 year ago
parent
commit
8b3471afb7
3 changed files with 23 additions and 13 deletions
  1. 9 6
      html.c
  2. 13 6
      xs_html.h
  3. 1 1
      xs_version.h

+ 9 - 6
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"));
 }
 
 

+ 13 - 6
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, "</%s>", h->content);
+            if (h->content)
+                fprintf(f, "</%s>", h->content);
         }
 
         break;

+ 1 - 1
xs_version.h

@@ -1 +1 @@
-/* 8994b1ef8501039ec97a388680ee361138e34554 2023-11-27T11:45:06+01:00 */
+/* b26300d01136fad22ee774d20a7da5b299f30d13 2023-12-03T11:38:09+01:00 */