From 953ac12a76a2bc0fb6f004d22182466b79def16b Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Sun, 29 Nov 2020 23:33:40 -0500 Subject: Stop being so weird about HTML --- html.c | 263 ++++++++++++++++++++++++++++++++++------------------------------- 1 file changed, 136 insertions(+), 127 deletions(-) (limited to 'html.c') diff --git a/html.c b/html.c index d55e5bf..4269871 100644 --- a/html.c +++ b/html.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -36,46 +37,64 @@ #include "archive.h" -static int htmlAddress(FILE *file, const char *class, struct Address addr) { +static char *htmlMailto(struct Address addr) { + struct Variable vars[] = { + { "mailbox", addr.mailbox }, + { "host", addr.host }, + {0}, + }; + return templateString("mailto:[mailbox]@[host]", vars, escapeURL); +} + +static int htmlAddress(FILE *file, struct Address addr, bool last) { + char *mailto = htmlMailto(addr); const char *template; if (addr.host) { - template = Q(
  • [name]
  • ); + template = Q( +
  • [name][,]
  • + ); } else if (addr.mailbox) { - template = (const char *) { - Q(
  • ) - Q(
    [mailbox]
    ) - Q(
      ) - }; + template = Q( +
    • [mailbox]: +
        + ); } else { - template = (const char *) { - Q(
      ) - Q(
    • ) - }; + template = Q( +
    ; +
  • + ); } struct Variable vars[] = { - { "class", class }, + { "mailto", mailto }, { "name", addressName(addr) }, { "mailbox", addr.mailbox }, + { ",", (last ? "" : ", ") }, {0}, }; - return templateRender(file, template, vars, escapeXML); + int error = templateRender(file, template, vars, escapeXML); + free(mailto); + return error; } static int -htmlAddressList(FILE *file, const char *class, struct AddressList list) { +htmlAddressList(FILE *file, const char *name, struct AddressList list) { if (!list.len) return 0; - const char *template = Q(
      ); + const char *template = Q( +
      + [name]: +
        + ); struct Variable vars[] = { - { "class", class }, + { "name", name }, {0}, }; int error = templateRender(file, template, vars, escapeXML); if (error) return error; for (size_t i = 0; i < list.len; ++i) { - error = htmlAddress(file, class, list.addrs[i]); + error = htmlAddress(file, list.addrs[i], i == list.len - 1); if (error) return error; } - return templateRender(file, Q(
      ), NULL, NULL); + return templateRender(file, Q(
    ), NULL, NULL); } static char *htmlReply(const struct Envelope *envelope) { @@ -118,7 +137,7 @@ static char *htmlMbox(const char *messageID) { static int htmlNavItem(FILE *file, const char *name, const char *base, const char *url) { - const char *template = Q(
  • [name]
  • ); + const char *template = Q(
  • [name]
  • ); struct Variable vars[] = { { "name", name }, { "base", base }, @@ -129,57 +148,51 @@ htmlNavItem(FILE *file, const char *name, const char *base, const char *url) { } int htmlMessageNav(FILE *file, const struct Envelope *envelope) { - int error = templateRender(file, Q(