aboutsummaryrefslogtreecommitdiff
path: root/html.c
diff options
context:
space:
mode:
authorgrunfink <grunfink@comam.es>2026-09-01 14:25:12 +0200
committergrunfink <grunfink@comam.es>2026-09-01 14:25:12 +0200
commitc38ad28d5daa44b592a04192c7eeebed644593d4 (patch)
treeea16f4734c998ff11764f269ea309df643236ead /html.c
parent5e74f4578816812f4f6ad47390e96dcfafee37d2 (diff)
New function text_browser_friendly() (still unused).
Diffstat (limited to 'html.c')
-rw-r--r--html.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/html.c b/html.c
index bcdeb62..89034ec 100644
--- a/html.c
+++ b/html.c
@@ -4651,6 +4651,40 @@ void set_user_lang(snac *user)
}
+int text_browser_friendly(const snac *user, const char *user_agent)
+/* returns true if the web UI must be adapted to text browsers */
+/* basically, this means to avoid details/summary as much as possible */
+{
+ if (user != NULL && xs_is_string(user_agent)) {
+ snac_debug(user, 1, xs_fmt("user-agent: %s", user_agent));
+
+ const char *text_browser_uas = xs_dict_get(user->config, "text_browser_uas");
+
+ if (xs_is_string(text_browser_uas)) {
+ xs *l = xs_split(text_browser_uas, "\n");
+ const char *v;
+
+ xs_list_foreach(l, v) {
+ if (*v == '\0')
+ continue;
+
+ xs *v2 = xs_strip_i(xs_dup(v));
+
+ /* a * means "all browsers", then yes */
+ if (strcmp(v2, "*") == 0)
+ return 1;
+
+ /* if this string is inside user_agent, then yes */
+ if (xs_str_in(user_agent, v2) != -1)
+ return 1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+
int html_get_handler(const xs_dict *req, const char *q_path,
char **body, int *b_size, char **ctype,
xs_str **etag, xs_str **last_modified)
@@ -4665,6 +4699,7 @@ int html_get_handler(const xs_dict *req, const char *q_path,
int save = 1;
int proxy = 0;
int terse = 0;
+ int tb_friendly = 0;
const char *v;
const xs_dict *q_vars = xs_dict_get(req, "q_vars");
@@ -4734,6 +4769,8 @@ int html_get_handler(const xs_dict *req, const char *q_path,
if (xs_is_true(xs_dict_get(srv_config, "proxy_media")))
proxy = 1;
+ tb_friendly = text_browser_friendly(user, xs_dict_get(req, "user-agent"));
+
/* return the RSS if requested by Accept header */
if (accept != NULL) {
if (xs_str_in(accept, "text/xml") != -1 ||