commit 5d3b22b
default
·
2023-11-28 08:29:54 +0000 UTC
parent 04b2532
Refactored to xs_html the poll part of html_entry().
1 files changed,
+53,
-30
M
html.c
M
html.c
+53,
-30
1@@ -1512,54 +1512,77 @@ xs_str *html_entry(snac *user, xs_str *os, const xs_dict *msg, int local,
2
3 if (closed || user == NULL) {
4 /* closed poll */
5- c = xs_str_cat(c, "<table class=\"snac-poll-result\">\n");
6+ xs_html *poll_result = xs_html_tag("table",
7+ xs_html_attr("class", "snac-poll-result"));
8
9 while (xs_list_iter(&p, &v)) {
10- const char *name = xs_dict_get(v, "name");
11- const xs_dict *replies = xs_dict_get(v, "replies");
12+ char *name = xs_dict_get(v, "name");
13+ xs_dict *replies = xs_dict_get(v, "replies");
14
15 if (name && replies) {
16- int nr = xs_number_get(xs_dict_get(replies, "totalItems"));
17- xs *es1 = encode_html(name);
18- xs *l = xs_fmt("<tr><td>%s:</td><td>%d</td></tr>\n", es1, nr);
19-
20- c = xs_str_cat(c, l);
21+ char *ti = (char *)xs_number_str(xs_dict_get(replies, "totalItems"));
22+
23+ xs_html_add(poll_result,
24+ xs_html_tag("tr",
25+ xs_html_tag("td",
26+ xs_html_text(name),
27+ xs_html_text(":")),
28+ xs_html_tag("td",
29+ xs_html_text(ti))));
30 }
31 }
32
33- c = xs_str_cat(c, "</table>\n");
34+ xs *s1 = xs_html_render(poll_result);
35+ c = xs_str_cat(c, s1);
36 }
37 else {
38 /* poll still active */
39- xs *s1 = xs_fmt("<div class=\"snac-poll-form\">\n"
40- "<form autocomplete=\"off\" "
41- "method=\"post\" action=\"%s/admin/vote\">\n"
42- "<input type=\"hidden\" name=\"actor\" value= \"%s\">\n"
43- "<input type=\"hidden\" name=\"irt\" value=\"%s\">\n",
44- user->actor, actor, id);
45+ xs *vote_action = xs_fmt("%s/admin/vote", user->actor);
46+ xs_html *form;
47+ xs_html *poll = xs_html_tag("div",
48+ xs_html_attr("class", "snac-poll-form"),
49+ form = xs_html_tag("form",
50+ xs_html_attr("autocomplete", "off"),
51+ xs_html_attr("method", "post"),
52+ xs_html_attr("action", vote_action),
53+ xs_html_sctag("input",
54+ xs_html_attr("type", "hidden"),
55+ xs_html_attr("name", "actor"),
56+ xs_html_attr("value", actor)),
57+ xs_html_sctag("input",
58+ xs_html_attr("type", "hidden"),
59+ xs_html_attr("name", "irt"),
60+ xs_html_attr("value", id))));
61
62 while (xs_list_iter(&p, &v)) {
63- const char *name = xs_dict_get(v, "name");
64- const xs_dict *replies = xs_dict_get(v, "replies");
65+ char *name = xs_dict_get(v, "name");
66+ xs_dict *replies = xs_dict_get(v, "replies");
67
68 if (name) {
69- int nr = xs_number_get(xs_dict_get(replies, "totalItems"));
70- xs *es1 = encode_html(name);
71- xs *opt = xs_fmt("<input type=\"%s\""
72- " id=\"%s\" value=\"%s\""
73- " name=\"question\"> <span title=\"%d\">%s</span><br>\n",
74- !xs_is_null(oo) ? "radio" : "checkbox",
75- es1, es1, nr, es1);
76-
77- s1 = xs_str_cat(s1, opt);
78+ char *ti = (char *)xs_number_str(xs_dict_get(replies, "totalItems"));
79+
80+ xs_html_add(form,
81+ xs_html_sctag("input",
82+ xs_html_attr("type", !xs_is_null(oo) ? "radio" : "checkbox"),
83+ xs_html_attr("id", name),
84+ xs_html_attr("value", name),
85+ xs_html_attr("name", "question")),
86+ xs_html_text(" "),
87+ xs_html_tag("span",
88+ xs_html_attr("title", ti),
89+ xs_html_text(name)),
90+ xs_html_sctag("br", NULL));
91 }
92 }
93
94- xs *s2 = xs_fmt("<p><input type=\"submit\" "
95- "class=\"button\" value=\"%s\">\n</form>\n</div>\n\n", L("Vote"));
96-
97- s1 = xs_str_cat(s1, s2);
98+ xs_html_add(form,
99+ xs_html_tag("p", NULL),
100+ xs_html_sctag("input",
101+ xs_html_attr("type", "submit"),
102+ xs_html_attr("class", "button"),
103+ xs_html_attr("value", L("Vote"))));
104
105+ xs *s1 = xs_html_render(poll);
106 c = xs_str_cat(c, s1);
107 }
108