The actor link is now an anchored link to the people page for connected users.

This commit is contained in:
default 2023-12-27 13:18:35 +01:00
parent bf435af788
commit 7c2e2902cc

31
html.c
View file

@ -101,7 +101,7 @@ xs_str *actor_name(xs_dict *actor)
}
xs_html *html_actor_icon(xs_dict *actor, const char *date,
xs_html *html_actor_icon(snac *user, xs_dict *actor, const char *date,
const char *udate, const char *url, int priv)
{
xs_html *actor_icon = xs_html_tag("p", NULL);
@ -120,6 +120,21 @@ xs_html *html_actor_icon(xs_dict *actor, const char *date,
if (avatar == NULL)
avatar = xs_fmt("data:image/png;base64, %s", default_avatar_base64());
char *actor_id = xs_dict_get(actor, "id");
xs *href = NULL;
if (user) {
/* if this actor is a follower or being followed, create an
anchored link to the people page instead of the actor url */
if (follower_check(user, actor_id) || following_check(user, actor_id)) {
xs *md5 = xs_md5_hex(actor_id, strlen(actor_id));
href = xs_fmt("%s/people#%s", user->actor, md5);
}
}
if (href == NULL)
href = xs_dup(actor_id);
xs_html_add(actor_icon,
xs_html_sctag("img",
xs_html_attr("loading", "lazy"),
@ -127,7 +142,7 @@ xs_html *html_actor_icon(xs_dict *actor, const char *date,
xs_html_attr("src", avatar),
xs_html_attr("alt", "")),
xs_html_tag("a",
xs_html_attr("href", xs_dict_get(actor, "id")),
xs_html_attr("href", href),
xs_html_attr("class", "p-author h-card snac-author"),
xs_html_raw(name))); /* name is already html-escaped */
@ -212,7 +227,7 @@ xs_html *html_actor_icon(xs_dict *actor, const char *date,
}
xs_html *html_msg_icon(const xs_dict *msg)
xs_html *html_msg_icon(snac *user, const xs_dict *msg)
{
char *actor_id;
xs *actor = NULL;
@ -236,7 +251,7 @@ xs_html *html_msg_icon(const xs_dict *msg)
date = xs_dict_get(msg, "published");
udate = xs_dict_get(msg, "updated");
actor_icon = html_actor_icon(actor, date, udate, url, priv);
actor_icon = html_actor_icon(user, actor, date, udate, url, priv);
}
return actor_icon;
@ -1231,7 +1246,7 @@ xs_html *html_entry(snac *user, xs_dict *msg, int local,
xs_html_tag("div",
xs_html_attr("class", "snac-origin"),
xs_html_text(L("follows you"))),
html_msg_icon(msg)));
html_msg_icon(local ? NULL : user, msg)));
}
else
if (!xs_match(type, "Note|Question|Page|Article")) {
@ -1379,7 +1394,7 @@ xs_html *html_entry(snac *user, xs_dict *msg, int local,
}
xs_html_add(post_header,
html_msg_icon(msg));
html_msg_icon(local ? NULL : user, msg));
/** post content **/
@ -1984,7 +1999,7 @@ xs_html *html_people_list(snac *snac, xs_list *list, char *header, char *t)
xs_html_attr("name", md5)),
xs_html_tag("div",
xs_html_attr("class", "snac-post-header"),
html_actor_icon(actor, xs_dict_get(actor, "published"), NULL, NULL, 0)));
html_actor_icon(NULL, actor, xs_dict_get(actor, "published"), NULL, NULL, 0)));
/* content (user bio) */
char *c = xs_dict_get(actor, "summary");
@ -2179,7 +2194,7 @@ xs_str *html_notifications(snac *user)
xs_html_add(entry,
xs_html_tag("div",
xs_html_attr("class", "snac-post"),
html_actor_icon(actor, NULL, NULL, NULL, 0)));
html_actor_icon(user, actor, NULL, NULL, NULL, 0)));
}
else {
xs *md5 = xs_md5_hex(id, strlen(id));