commit 97b7100

default  ·  2023-11-28 18:57:59 +0000 UTC
parent a0ae088
Children in html_entry() is (almost) xs_html.
1 files changed,  +26, -28
M html.c
M html.c
+26, -28
 1@@ -1988,25 +1988,27 @@ xs_str *html_entry(snac *user, xs_str *os, const xs_dict *msg, int local,
 2         int left     = xs_list_len(children);
 3 
 4         if (left) {
 5-            char *p, *cmd5;
 6-            int older_open = 0;
 7-            xs *ss = xs_str_new(NULL);
 8-            int n_children = 0;
 9+            xs_html *ch_details = xs_html_tag("details",
10+                xs_html_attr("open", NULL),
11+                xs_html_tag("summary",
12+                    xs_html_text("...")));
13 
14-            ss = xs_str_cat(ss, "<details open><summary>...</summary><p>\n");
15+            xs_html *ch_container = xs_html_tag("div",
16+                xs_html_attr("class", level < 4 ? "snac-children" : "snac-children-too-deep"));
17 
18-            if (level < 4)
19-                ss = xs_str_cat(ss, "<div class=\"snac-children\">\n");
20-            else
21-                ss = xs_str_cat(ss, "<div>\n");
22+            xs_html_add(ch_details,
23+                ch_container);
24 
25+            xs_html *ch_older = NULL;
26             if (left > 3) {
27-                xs *s1 = xs_fmt("<details><summary>%s</summary>\n", L("Older..."));
28-                ss = xs_str_cat(ss, s1);
29-                older_open = 1;
30+                xs_html_add(ch_container,
31+                    ch_older = xs_html_tag("details",
32+                        xs_html_tag("summary",
33+                            xs_html_text(L("Older...")))));
34             }
35 
36-            p = children;
37+            xs_list *p = children;
38+            char *cmd5;
39             while (xs_list_iter(&p, &cmd5)) {
40                 xs *chd = NULL;
41 
42@@ -2015,14 +2017,16 @@ xs_str *html_entry(snac *user, xs_str *os, const xs_dict *msg, int local,
43                 else
44                     object_get_by_md5(cmd5, &chd);
45 
46-                if (older_open && left <= 3) {
47-                    ss = xs_str_cat(ss, "</details>\n");
48-                    older_open = 0;
49-                }
50-
51                 if (chd != NULL && xs_is_null(xs_dict_get(chd, "name"))) {
52-                    ss = html_entry(user, ss, chd, local, level + 1, cmd5, hide_children);
53-                    n_children++;
54+                    xs *s1 = xs_str_new(NULL);
55+                    s1 = html_entry(user, s1, chd, local, level + 1, cmd5, hide_children);
56+
57+                    if (left > 3)
58+                        xs_html_add(ch_older,
59+                            xs_html_raw(s1));
60+                    else
61+                        xs_html_add(ch_container,
62+                            xs_html_raw(s1));
63                 }
64                 else
65                     srv_debug(2, xs_fmt("cannot read child %s", cmd5));
66@@ -2030,14 +2034,8 @@ xs_str *html_entry(snac *user, xs_str *os, const xs_dict *msg, int local,
67                 left--;
68             }
69 
70-            if (older_open)
71-                ss = xs_str_cat(ss, "</details>\n");
72-
73-            ss = xs_str_cat(ss, "</div>\n");
74-            ss = xs_str_cat(ss, "</details>\n");
75-
76-            if (n_children)
77-                s = xs_str_cat(s, ss);
78+            xs *s1 = xs_html_render(ch_details);
79+            s = xs_str_cat(s, s1);
80         }
81     }
82