diff options
Diffstat (limited to '')
-rw-r--r-- | html.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/html.c b/html.c index 090bfab..352e229 100644 --- a/html.c +++ b/html.c @@ -205,14 +205,36 @@ int htmlThreadOpen(FILE *file, const struct Envelope *envelope) { return error; } -int htmlSubthreadOpen(FILE *file) { - return templateRender( - file, TEMPLATE(<section class="subthread">), NULL, NULL +static size_t threadCount(struct List thread) { + size_t count = 0; + for (size_t i = 0; i < thread.len; ++i) { + if (thread.ptr[i].type == List) { + count += threadCount(thread.ptr[i].list); + } else { + count++; + } + } + return count; +} + +int htmlSubthreadOpen(FILE *file, struct List thread) { + const char *template = TEMPLATE( + <details class="subthread" open> + <summary>[replies] repl[ies]</summary> ); + size_t count = threadCount(thread); + char replies[32]; + snprintf(replies, sizeof(replies), "%zu", count); + struct Variable vars[] = { + { "replies", replies }, + { "ies", (count > 1 ? "ies" : "y") }, + {0}, + }; + return templateRender(file, template, vars, escapeXML); } int htmlSubthreadClose(FILE *file) { - return templateRender(file, TEMPLATE(</section>), NULL, NULL); + return templateRender(file, TEMPLATE(</details>), NULL, NULL); } int htmlThreadClose(FILE *file) { |