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