diff --git a/html.c b/html.c
index a6c49de..c8b08d2 100644
--- a/html.c
+++ b/html.c
@@ -41,37 +41,24 @@ int login(snac *snac, const xs_dict *headers)
}
-xs_str *actor_name(xs_dict *actor)
-/* gets the actor name */
+xs_str *replace_shortnames(xs_str *s, xs_list *tag)
+/* replaces all the :shortnames: with the emojis in tag */
{
- xs_list *p;
- char *v;
- xs_str *name;
-
- if (xs_is_null((v = xs_dict_get(actor, "name"))) || *v == '\0') {
- if (xs_is_null(v = xs_dict_get(actor, "preferredUsername")) || *v == '\0') {
- v = "anonymous";
- }
- }
-
- name = encode_html(v);
-
- /* replace the :shortnames: */
- if (!xs_is_null(p = xs_dict_get(actor, "tag"))) {
- xs *tag = NULL;
- if (xs_type(p) == XSTYPE_DICT) {
+ if (!xs_is_null(tag)) {
+ xs *tag_list = NULL;
+ if (xs_type(tag) == XSTYPE_DICT) {
/* not a list */
- tag = xs_list_new();
- tag = xs_list_append(tag, p);
+ tag_list = xs_list_new();
+ tag_list = xs_list_append(tag_list, tag);
} else {
/* is a list */
- tag = xs_dup(p);
+ tag_list = xs_dup(tag);
}
- xs_list *tags = tag;
+ xs_list *p = tag_list;
+ char *v;
- /* iterate the tags */
- while (xs_list_iter(&tags, &v)) {
+ while (xs_list_iter(&p, &v)) {
char *t = xs_dict_get(v, "type");
if (t && strcmp(t, "Emoji") == 0) {
@@ -80,16 +67,34 @@ xs_str *actor_name(xs_dict *actor)
if (n && i) {
char *u = xs_dict_get(i, "url");
- xs *img = xs_fmt("", u);
+ xs_html *img = xs_html_sctag("img",
+ xs_html_attr("loading", "lazy"),
+ xs_html_attr("src", u),
+ xs_html_attr("style", "height: 1em; vertical-align: middle;"));
- name = xs_replace_i(name, n, img);
+ xs *s1 = xs_html_render(img);
+ s = xs_replace_i(s, n, s1);
}
}
}
}
- return name;
+ return s;
+}
+
+
+xs_str *actor_name(xs_dict *actor)
+/* gets the actor name */
+{
+ char *v;
+
+ if (xs_is_null((v = xs_dict_get(actor, "name"))) || *v == '\0') {
+ if (xs_is_null(v = xs_dict_get(actor, "preferredUsername")) || *v == '\0') {
+ v = "anonymous";
+ }
+ }
+
+ return replace_shortnames(xs_html_encode(v), xs_dict_get(actor, "tag"));
}
@@ -1413,7 +1418,6 @@ xs_html *html_entry(snac *user, xs_dict *msg, int local,
char *content = xs_dict_get(msg, "content");
xs *c = sanitize(xs_is_null(content) ? "" : content);
- char *p, *v;
/* do some tweaks to the content */
c = xs_replace_i(c, "\r", "");
@@ -1429,40 +1433,7 @@ xs_html *html_entry(snac *user, xs_dict *msg, int local,
}
/* replace the :shortnames: */
- if (!xs_is_null(p = xs_dict_get(msg, "tag"))) {
- xs *tag = NULL;
- if (xs_type(p) == XSTYPE_DICT) {
- /* not a list */
- tag = xs_list_new();
- tag = xs_list_append(tag, p);
- }
- else
- if (xs_type(p) == XSTYPE_LIST)
- tag = xs_dup(p);
- else
- tag = xs_list_new();
-
- xs_list *tags = tag;
-
- /* iterate the tags */
- while (xs_list_iter(&tags, &v)) {
- char *t = xs_dict_get(v, "type");
-
- if (t && strcmp(t, "Emoji") == 0) {
- char *n = xs_dict_get(v, "name");
- char *i = xs_dict_get(v, "icon");
-
- if (n && i) {
- char *u = xs_dict_get(i, "url");
- xs *img = xs_fmt("", u, n);
-
- c = xs_replace_i(c, n, img);
- }
- }
- }
- }
+ c = replace_shortnames(c, xs_dict_get(msg, "tag"));
/* c contains sanitized HTML */
xs_html_add(snac_content,