commit c963a29

default  ·  2023-11-28 09:55:12 +0000 UTC
parent 645a27d
More xs_html refactoring.
1 files changed,  +28, -25
M html.c
M html.c
+28, -25
 1@@ -745,29 +745,33 @@ xs_str *html_user_header(snac *snac, xs_str *s, int local)
 2 
 3     /* user info */
 4     {
 5-        s = xs_str_cat(s, "<div class=\"h-card snac-top-user\">\n");
 6+        xs_html *top_user = xs_html_tag("div",
 7+            xs_html_attr("class", "h-card snac-top-user"));
 8 
 9         if (local) {
10-            const char *header = xs_dict_get(snac->config, "header");
11+            char *header = xs_dict_get(snac->config, "header");
12             if (header && *header) {
13-                xs *h = encode_html(header);
14-                xs *s1 = xs_fmt("<div class=\"snac-top-user-banner\" style=\"clear: both\">"
15-                    "<br><img src=\"%s\"/></div>\n", h);
16-                s = xs_str_cat(s, s1);
17+                xs_html_add(top_user,
18+                    xs_html_tag("div",
19+                        xs_html_attr("class", "snac-top-user-banner"),
20+                        xs_html_attr("style", "clear: both"),
21+                        xs_html_sctag("br", NULL),
22+                        xs_html_sctag("img",
23+                            xs_html_attr("src", header))));
24             }
25         }
26 
27-        const char *_tmpl =
28-            "<p class=\"p-name snac-top-user-name\">%s</p>\n"
29-            "<p class=\"snac-top-user-id\">@%s@%s</p>\n";
30-
31-        xs *es1 = encode_html(xs_dict_get(snac->config, "name"));
32-        xs *es2 = encode_html(xs_dict_get(snac->config, "uid"));
33-        xs *es3 = encode_html(xs_dict_get(srv_config, "host"));
34-
35-        xs *s1 = xs_fmt(_tmpl, es1, es2, es3);
36+        xs *handle = xs_fmt("@%s@%s",
37+            xs_dict_get(snac->config, "uid"),
38+            xs_dict_get(srv_config, "host"));
39 
40-        s = xs_str_cat(s, s1);
41+        xs_html_add(top_user,
42+            xs_html_tag("p",
43+                xs_html_attr("class", "p-name snac-top-user-name"),
44+                xs_html_text(xs_dict_get(snac->config, "name"))),
45+            xs_html_tag("p",
46+                xs_html_attr("class", "snac-top-user-id"),
47+                xs_html_text(handle)));
48 
49         if (local) {
50             xs *es1  = encode_html(xs_dict_get(snac->config, "bio"));
51@@ -779,10 +783,8 @@ xs_str *html_user_header(snac *snac, xs_str *s, int local)
52                 xs_html_attr("class", "p-note snac-top-user-bio"),
53                 xs_html_raw(bio2)); /* already sanitized */
54 
55-            {
56-                xs *s1 = xs_html_render(top_user_bio);
57-                s = xs_str_cat(s, s1);
58-            }
59+            xs_html_add(top_user,
60+                top_user_bio);
61 
62             xs_dict *metadata = xs_dict_get(snac->config, "metadata");
63             if (xs_type(metadata) == XSTYPE_DICT) {
64@@ -814,14 +816,15 @@ xs_str *html_user_header(snac *snac, xs_str *s, int local)
65                         xs_html_sctag("br", NULL));
66                 }
67 
68-                {
69-                    xs *s1 = xs_html_render(snac_metadata);
70-                    s = xs_str_cat(s, s1);
71-                }
72+                xs_html_add(top_user,
73+                    snac_metadata);
74             }
75         }
76 
77-        s = xs_str_cat(s, "</div>\n");
78+        {
79+            xs *s1 = xs_html_render(top_user);
80+            s = xs_str_cat(s, s1);
81+        }
82     }
83 
84     return s;