diff --git a/html.c b/html.c index 310c9eb..8813994 100644 --- a/html.c +++ b/html.c @@ -574,7 +574,7 @@ static xs_html *html_instance_body(char *tag) } -xs_html *html_user_head(snac *user, char *desc) +xs_html *html_user_head(snac *user, char *desc, char *url) { xs_html *head = html_base_head(); @@ -664,6 +664,13 @@ xs_html *html_user_head(snac *user, char *desc) xs_html_attr("title", "RSS"), xs_html_attr("href", rss_url))); + /* ActivityPub alternate link (actor id) */ + xs_html_add(head, + xs_html_sctag("link", + xs_html_attr("rel", "alternate"), + xs_html_attr("type", "application/activity+json"), + xs_html_attr("href", url ? url : user->actor))); + return head; } @@ -1974,6 +1981,7 @@ xs_str *html_timeline(snac *user, const xs_list *list, int read_only, double t = ftime(); xs *desc = NULL; + xs *alternate = NULL; if (xs_list_len(list) == 1) { /* only one element? pick the description from the source */ @@ -1982,13 +1990,15 @@ xs_str *html_timeline(snac *user, const xs_list *list, int read_only, object_get_by_md5(id, &d); if (d && (v = xs_dict_get(d, "sourceContent")) != NULL) desc = xs_dup(v); + + alternate = xs_dup(xs_dict_get(d, "id")); } xs_html *head; xs_html *body; if (user) { - head = html_user_head(user, desc); + head = html_user_head(user, desc, alternate); body = html_user_body(user, read_only); } else { @@ -2257,7 +2267,7 @@ xs_str *html_people(snac *user) xs *wers = follower_list(user); xs_html *html = xs_html_tag("html", - html_user_head(user, NULL), + html_user_head(user, NULL, NULL), xs_html_add(html_user_body(user, 0), xs_html_tag("div", xs_html_attr("class", "snac-posts"), @@ -2277,7 +2287,7 @@ xs_str *html_notifications(snac *user, int skip, int show) xs_html *body = html_user_body(user, 0); xs_html *html = xs_html_tag("html", - html_user_head(user, NULL), + html_user_head(user, NULL, NULL), body); xs *clear_all_action = xs_fmt("%s/admin/clear-notifications", user->actor);