From e4c26715a138862b17bb23562be28e6ea4d949f9 Mon Sep 17 00:00:00 2001 From: Alex Schroeder Date: Fri, 2 Dec 2022 09:55:25 +0100 Subject: Add an option to always show sensitive content - add a cw key to user.json - add a cw checkbox to user setup form - handle the cw parameter when updating user setup - when rendering an entry, look at the cw config: if set, use a h3 heading for the summary; otherwise use details + summar + SENSITIVE CONTENT like before --- html.c | 28 ++++++++++++++++++++++------ utils.c | 1 + 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/html.c b/html.c index ea7830c..5912422 100644 --- a/html.c +++ b/html.c @@ -277,6 +277,9 @@ d_char *html_top_controls(snac *snac, d_char *s) "

%s:
\n" "

\n" + "

\n" + "

\n" + "

%s:
\n" "

\n" @@ -320,6 +323,8 @@ d_char *html_top_controls(snac *snac, d_char *s) xs_dict_get(snac->config, "avatar"), L("Bio"), xs_dict_get(snac->config, "bio"), + xs_dict_get(snac->config, "cw"), + L("Always show sensitive content"), L("Email address for notifications"), email, L("Password (only to change it)"), @@ -613,11 +618,17 @@ d_char *html_entry(snac *snac, d_char *os, char *msg, int local, int level, int if (!xs_is_null(v = xs_dict_get(msg, "sensitive")) && xs_type(v) == XSTYPE_TRUE) { if (xs_is_null(v = xs_dict_get(msg, "summary")) || *v == '\0') v = "..."; - - xs *s1 = xs_fmt("
%s [%s]\n", v, L("SENSITIVE CONTENT")); - s = xs_str_cat(s, s1); - - sensitive = 1; + char *cw = xs_dict_get(snac->config, "cw"); + if (xs_is_null(cw)) + cw = ""; + if (strcmp(cw, "checked") == 0) { + xs *s1 = xs_fmt("

%s

", v); + s = xs_str_cat(s, s1); + } else { + xs *s1 = xs_fmt("
%s [%s]\n", v, L("SENSITIVE CONTENT")); + s = xs_str_cat(s, s1); + sensitive = 1; + } } #if 0 @@ -1379,6 +1390,12 @@ int html_post_handler(d_char *req, char *q_path, d_char *payload, int p_size, snac.config = xs_dict_set(snac.config, "avatar", v); if ((v = xs_dict_get(p_vars, "bio")) != NULL) snac.config = xs_dict_set(snac.config, "bio", v); + if ((v = xs_dict_get(p_vars, "cw")) != NULL && + strcmp(v, "on") == 0) { + snac.config = xs_dict_set(snac.config, "cw", "checked"); + } else { /* if the checkbox is not set, the parameter is missing */ + snac.config = xs_dict_set(snac.config, "cw", ""); + } if ((v = xs_dict_get(p_vars, "email")) != NULL) snac.config = xs_dict_set(snac.config, "email", v); @@ -1428,4 +1445,3 @@ int html_post_handler(d_char *req, char *q_path, d_char *payload, int p_size, return status; } - diff --git a/utils.c b/utils.c index f3e6561..8b0b458 100644 --- a/utils.c +++ b/utils.c @@ -226,6 +226,7 @@ int adduser(char *uid) config = xs_dict_append(config, "name", uid); config = xs_dict_append(config, "avatar", ""); config = xs_dict_append(config, "bio", ""); + config = xs_dict_append(config, "cw", ""); config = xs_dict_append(config, "published", date); config = xs_dict_append(config, "passwd", pwd_f); -- cgit v1.2.3 From a3fa7dbaec4e3d61eb51224ca44d6c9fe644af3c Mon Sep 17 00:00:00 2001 From: Alex Schroeder Date: Sat, 3 Dec 2022 20:46:51 +0100 Subject: No sensitive content in the public timeline Don't use h3 in the public timeline. Use the details tag, as before, but default to "open" if the config setting is set. Only do this in the private timeline (where local == 0, as set by html_get_handler). --- html.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/html.c b/html.c index 5912422..fbb313b 100644 --- a/html.c +++ b/html.c @@ -618,17 +618,13 @@ d_char *html_entry(snac *snac, d_char *os, char *msg, int local, int level, int if (!xs_is_null(v = xs_dict_get(msg, "sensitive")) && xs_type(v) == XSTYPE_TRUE) { if (xs_is_null(v = xs_dict_get(msg, "summary")) || *v == '\0') v = "..."; + /* only show it when not in the public timeline and the config setting is "open" */ char *cw = xs_dict_get(snac->config, "cw"); - if (xs_is_null(cw)) + if (xs_is_null(cw) || local) cw = ""; - if (strcmp(cw, "checked") == 0) { - xs *s1 = xs_fmt("

%s

", v); - s = xs_str_cat(s, s1); - } else { - xs *s1 = xs_fmt("
%s [%s]\n", v, L("SENSITIVE CONTENT")); - s = xs_str_cat(s, s1); - sensitive = 1; - } + xs *s1 = xs_fmt("
%s [%s]\n", cw, v, L("SENSITIVE CONTENT")); + s = xs_str_cat(s, s1); + sensitive = 1; } #if 0 @@ -1392,7 +1388,7 @@ int html_post_handler(d_char *req, char *q_path, d_char *payload, int p_size, snac.config = xs_dict_set(snac.config, "bio", v); if ((v = xs_dict_get(p_vars, "cw")) != NULL && strcmp(v, "on") == 0) { - snac.config = xs_dict_set(snac.config, "cw", "checked"); + snac.config = xs_dict_set(snac.config, "cw", "open"); } else { /* if the checkbox is not set, the parameter is missing */ snac.config = xs_dict_set(snac.config, "cw", ""); } -- cgit v1.2.3