From 620571b43726e1bec63b7ea7a42d01fb09a9d613 Mon Sep 17 00:00:00 2001 From: grunfink Date: Thu, 24 Jul 2025 09:48:50 +0200 Subject: Fixed link in tags, when it's an RSS. --- html.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'html.c') diff --git a/html.c b/html.c index 7d748f9..aeb6cb1 100644 --- a/html.c +++ b/html.c @@ -3002,7 +3002,13 @@ xs_str *html_timeline(snac *user, const xs_list *list, int read_only, const char *ht; xs_list_foreach(followed_hashtags, ht) { - xs *url = xs_fmt("%s/admin?q=%s", user->actor, ht); + xs *url = NULL; + + if (!xs_startswith(ht, "https:/""/")) + url = xs_fmt("%s/admin?q=%s", user->actor, ht); + else + url = xs_dup(ht); + url = xs_replace_i(url, "#", "%23"); xs_html_add(loht, -- cgit v1.2.3 From 0b5b4593cdbcfe8fcb7fc05a44709d08f70ed223 Mon Sep 17 00:00:00 2001 From: grunfink Date: Fri, 1 Aug 2025 19:14:43 +0200 Subject: Show the version in the 'powered by...' link. --- html.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'html.c') diff --git a/html.c b/html.c index aeb6cb1..10b5999 100644 --- a/html.c +++ b/html.c @@ -2855,7 +2855,7 @@ xs_html *html_footer(const snac *user) xs_html_attr("href", WHAT_IS_SNAC_URL), xs_html_tag("abbr", xs_html_attr("title", "Social Networks Are Crap"), - xs_html_text("snac")))); + xs_html_text(USER_AGENT)))); } -- cgit v1.2.3 From a30844bba3cafe2f1eede8eb06bf4d91463e99dd Mon Sep 17 00:00:00 2001 From: grunfink Date: Tue, 12 Aug 2025 10:33:48 +0200 Subject: Show a dropdown with the user configured languages (still unused). --- html.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'html.c') diff --git a/html.c b/html.c index 10b5999..5574edb 100644 --- a/html.c +++ b/html.c @@ -458,6 +458,31 @@ xs_html *html_note(snac *user, const char *summary, xs_html_attr("name", "is_draft"), xs_html_attr(is_draft ? "checked" : "", NULL)))); + const char *post_langs = xs_dict_get(user->config, "post_langs"); + + if (xs_is_string(post_langs) && *post_langs) { + xs *ll = xs_split(post_langs, " "); + const char *lang; + + xs_html *post_lang = xs_html_tag("select", + xs_html_attr("name", "post_lang")); + + xs_list_foreach(ll, lang) { + if (*lang) { + xs_html_add(post_lang, + xs_html_tag("option", + xs_html_text(lang), + xs_html_attr("value", lang))); + } + } + + xs_html_add(form, + xs_html_tag("p", NULL), + xs_html_text(L("Language:")), + xs_html_text(" "), + post_lang); + } + /* post date and time */ xs *post_date = NULL; xs *post_time = NULL; -- cgit v1.2.3 From 4d683302bc8afc80dc48ade7c2b1bb7428ad7384 Mon Sep 17 00:00:00 2001 From: grunfink Date: Tue, 12 Aug 2025 10:42:06 +0200 Subject: Post language is used in new posts. --- html.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'html.c') diff --git a/html.c b/html.c index 5574edb..476c7ac 100644 --- a/html.c +++ b/html.c @@ -4415,6 +4415,7 @@ int html_post_handler(const xs_dict *req, const char *q_path, const char *edit_id = xs_dict_get(p_vars, "edit_id"); const char *post_date = xs_dict_get_def(p_vars, "post_date", ""); const char *post_time = xs_dict_get_def(p_vars, "post_time", ""); + const char *post_lang = xs_dict_get(p_vars, "post_lang"); int priv = !xs_is_null(xs_dict_get(p_vars, "mentioned_only")); int store_as_draft = !xs_is_null(xs_dict_get(p_vars, "is_draft")); xs *attach_list = xs_list_new(); @@ -4498,7 +4499,7 @@ int html_post_handler(const xs_dict *req, const char *q_path, enqueue_close_question(&snac, xs_dict_get(msg, "id"), end_secs); } else - msg = msg_note(&snac, content_2, to, in_reply_to, attach_list, priv, NULL, NULL); + msg = msg_note(&snac, content_2, to, in_reply_to, attach_list, priv, post_lang, NULL); if (sensitive != NULL) { msg = xs_dict_set(msg, "sensitive", xs_stock(XSTYPE_TRUE)); -- cgit v1.2.3 From 944394e583fea7b8f158e5605ce4fdb9f210c5c3 Mon Sep 17 00:00:00 2001 From: grunfink Date: Tue, 12 Aug 2025 10:51:54 +0200 Subject: Editing a post keeps the original language. --- html.c | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) (limited to 'html.c') diff --git a/html.c b/html.c index 476c7ac..5740d82 100644 --- a/html.c +++ b/html.c @@ -368,7 +368,8 @@ xs_html *html_note(snac *user, const char *summary, const xs_val *mnt_only, const char *redir, const char *in_reply_to, int poll, const xs_list *att_files, const xs_list *att_alt_texts, - int is_draft, const char *published) + int is_draft, const char *published, + const char *note_lang) /* Yes, this is a FUCKTON of arguments and I'm a bit embarrased */ { xs *action = xs_fmt("%s/admin/note", user->actor); @@ -469,10 +470,19 @@ xs_html *html_note(snac *user, const char *summary, xs_list_foreach(ll, lang) { if (*lang) { - xs_html_add(post_lang, - xs_html_tag("option", - xs_html_text(lang), - xs_html_attr("value", lang))); + if (xs_is_string(note_lang) && strcmp(lang, note_lang) == 0) { + xs_html_add(post_lang, + xs_html_tag("option", + xs_html_text(lang), + xs_html_attr("selected", NULL), + xs_html_attr("value", lang))); + } + else { + xs_html_add(post_lang, + xs_html_tag("option", + xs_html_text(lang), + xs_html_attr("value", lang))); + } } } @@ -1227,7 +1237,7 @@ xs_html *html_top_controls(snac *user) NULL, NULL, xs_stock(XSTYPE_FALSE), "", xs_stock(XSTYPE_FALSE), NULL, - NULL, 1, NULL, NULL, 0, NULL), + NULL, 1, NULL, NULL, 0, NULL, NULL), /** operations **/ xs_html_tag("details", @@ -1913,6 +1923,15 @@ xs_html *html_entry_controls(snac *user, const char *actor, } } + const char *note_lang = NULL; + const xs_dict *cmap = xs_dict_get(msg, "contentMap"); + if (xs_is_dict(cmap)) { + const char *dummy; + int c = 0; + + xs_dict_next(cmap, ¬e_lang, &dummy, &c); + } + xs_html_add(controls, xs_html_tag("div", xs_html_tag("p", NULL), html_note(user, L("Edit..."), @@ -1922,7 +1941,7 @@ xs_html *html_entry_controls(snac *user, const char *actor, xs_dict_get(msg, "sensitive"), xs_dict_get(msg, "summary"), xs_stock(is_msg_public(msg) ? XSTYPE_FALSE : XSTYPE_TRUE), redir, NULL, 0, att_files, att_alt_texts, is_draft(user, id), - xs_dict_get(msg, "published"))), + xs_dict_get(msg, "published"), note_lang)), xs_html_tag("p", NULL)); } @@ -1941,7 +1960,7 @@ xs_html *html_entry_controls(snac *user, const char *actor, NULL, NULL, xs_dict_get(msg, "sensitive"), xs_dict_get(msg, "summary"), xs_stock(is_msg_public(msg) ? XSTYPE_FALSE : XSTYPE_TRUE), redir, - id, 0, NULL, NULL, 0, NULL)), + id, 0, NULL, NULL, 0, NULL, NULL)), xs_html_tag("p", NULL)); } @@ -3329,7 +3348,7 @@ xs_html *html_people_list(snac *user, xs_list *list, const char *header, const c NULL, actor_id, xs_stock(XSTYPE_FALSE), "", xs_stock(XSTYPE_FALSE), NULL, - NULL, 0, NULL, NULL, 0, NULL), + NULL, 0, NULL, NULL, 0, NULL, NULL), xs_html_tag("p", NULL)); xs_html_add(snac_post, snac_controls); -- cgit v1.2.3 From 40592fb3d4b6519f611a25048481c19ce92b1cbe Mon Sep 17 00:00:00 2001 From: grunfink Date: Tue, 12 Aug 2025 11:00:19 +0200 Subject: post_langs can now be set from the user settings. --- html.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'html.c') diff --git a/html.c b/html.c index 5740d82..00da602 100644 --- a/html.c +++ b/html.c @@ -1346,6 +1346,7 @@ xs_html *html_top_controls(snac *user) const char *latitude = xs_dict_get_def(user->config, "latitude", ""); const char *longitude = xs_dict_get_def(user->config, "longitude", ""); const char *webhook = xs_dict_get_def(user->config, "notify_webhook", ""); + const char *post_langs = xs_dict_get_def(user->config, "post_langs", ""); xs *metadata = NULL; const xs_dict *md = xs_dict_get(user->config, "metadata"); @@ -1621,6 +1622,15 @@ xs_html *html_top_controls(snac *user) xs_html_sctag("br", NULL), tz_select), + xs_html_tag("p", + xs_html_text(L("Languages you usually post in:")), + xs_html_sctag("br", NULL), + xs_html_sctag("input", + xs_html_attr("type", "next"), + xs_html_attr("name", "post_langs"), + xs_html_attr("value", post_langs), + xs_html_attr("placeholder", L("en fr es de_AT")))), + xs_html_tag("p", xs_html_text(L("New password:")), xs_html_sctag("br", NULL), @@ -4924,6 +4934,8 @@ int html_post_handler(const xs_dict *req, const char *q_path, snac.config = xs_dict_set(snac.config, "lang", v); if ((v = xs_dict_get(p_vars, "tz")) != NULL) snac.config = xs_dict_set(snac.config, "tz", v); + if ((v = xs_dict_get(p_vars, "post_langs")) != NULL) + snac.config = xs_dict_set(snac.config, "post_langs", v); snac.config = xs_dict_set(snac.config, "latitude", xs_dict_get_def(p_vars, "latitude", "")); snac.config = xs_dict_set(snac.config, "longitude", xs_dict_get_def(p_vars, "longitude", "")); -- cgit v1.2.3