commit 64111f8

default  ·  2023-08-14 08:08:19 +0000 UTC
parent 8970df9
Some work towards an instance timeline.
1 files changed,  +48, -18
M html.c
M html.c
+48, -18
  1@@ -218,10 +218,10 @@ xs_str *html_msg_icon(xs_str *os, const xs_dict *msg)
  2 }
  3 
  4 
  5-xs_str *html_user_header(snac *snac, xs_str *s, int local)
  6-/* creates the HTML header */
  7+xs_str *html_base_header(xs_str *s)
  8 {
  9-    char *p, *v;
 10+    xs_list *p;
 11+    xs_str *v;
 12 
 13     s = xs_str_cat(s, "<!DOCTYPE html>\n<html>\n<head>\n");
 14     s = xs_str_cat(s, "<meta name=\"viewport\" "
 15@@ -236,6 +236,25 @@ xs_str *html_user_header(snac *snac, xs_str *s, int local)
 16         s = xs_str_cat(s, s1);
 17     }
 18 
 19+    return s;
 20+}
 21+
 22+
 23+xs_str *html_instance_header(xs_str *s)
 24+{
 25+    s = html_base_header(s);
 26+
 27+    s = xs_str_cat(s, "</head>\n<body>\n");
 28+
 29+    return s;
 30+}
 31+
 32+
 33+xs_str *html_user_header(snac *snac, xs_str *s, int local)
 34+/* creates the HTML header */
 35+{
 36+    s = html_base_header(s);
 37+
 38     /* add the user CSS */
 39     {
 40         xs *css = NULL;
 41@@ -1345,7 +1364,7 @@ xs_str *html_entry(snac *user, xs_str *os, const xs_dict *msg, int local,
 42 }
 43 
 44 
 45-xs_str *html_user_footer(xs_str *s)
 46+xs_str *html_footer(xs_str *s)
 47 {
 48     xs *s1 = xs_fmt(
 49         "<div class=\"snac-footer\">\n"
 50@@ -1361,7 +1380,7 @@ xs_str *html_user_footer(xs_str *s)
 51 }
 52 
 53 
 54-xs_str *html_timeline(snac *snac, const xs_list *list, int local, int skip, int show, int show_more)
 55+xs_str *html_timeline(snac *user, const xs_list *list, int local, int skip, int show, int show_more)
 56 /* returns the HTML for the timeline */
 57 {
 58     xs_str *s = xs_str_new(NULL);
 59@@ -1369,26 +1388,35 @@ xs_str *html_timeline(snac *snac, const xs_list *list, int local, int skip, int
 60     char *v;
 61     double t = ftime();
 62 
 63-    s = html_user_header(snac, s, local);
 64+    if (user)
 65+        s = html_user_header(user, s, local);
 66+    else
 67+        s = html_instance_header(s);
 68 
 69-    if (!local)
 70-        s = html_top_controls(snac, s);
 71+    if (user && !local)
 72+        s = html_top_controls(user, s);
 73 
 74     s = xs_str_cat(s, "<a name=\"snac-posts\"></a>\n");
 75     s = xs_str_cat(s, "<div class=\"snac-posts\">\n");
 76 
 77     while (xs_list_iter(&p, &v)) {
 78         xs *msg = NULL;
 79+        int status;
 80 
 81-        if (!valid_status(timeline_get_by_md5(snac, v, &msg)))
 82+        if (user)
 83+            status = timeline_get_by_md5(user, v, &msg);
 84+        else
 85+            status = object_get_by_md5(v, &msg);
 86+
 87+        if (!valid_status(status))
 88             continue;
 89 
 90-        s = html_entry(snac, s, msg, local, 0, v, 0);
 91+        s = html_entry(user, s, msg, local, 0, v, 0);
 92     }
 93 
 94     s = xs_str_cat(s, "</div>\n");
 95 
 96-    if (local) {
 97+    if (user && local) {
 98         xs *s1 = xs_fmt(
 99             "<div class=\"snac-history\">\n"
100             "<p class=\"snac-history-title\">%s</p><ul>\n",
101@@ -1397,7 +1425,7 @@ xs_str *html_timeline(snac *snac, const xs_list *list, int local, int skip, int
102 
103         s = xs_str_cat(s, s1);
104 
105-        xs *list = history_list(snac);
106+        xs *list = history_list(user);
107         char *p, *v;
108 
109         p = list;
110@@ -1405,7 +1433,7 @@ xs_str *html_timeline(snac *snac, const xs_list *list, int local, int skip, int
111             xs *fn = xs_replace(v, ".html", "");
112             xs *s1 = xs_fmt(
113                         "<li><a href=\"%s/h/%s\">%s</a></li>\n",
114-                        snac->actor, v, fn);
115+                        user->actor, v, fn);
116 
117             s = xs_str_cat(s, s1);
118         }
119@@ -1419,19 +1447,21 @@ xs_str *html_timeline(snac *snac, const xs_list *list, int local, int skip, int
120     }
121 
122     if (show_more) {
123+        const char *base_url = user ? user->actor : srv_baseurl;
124+
125         xs *s1 = xs_fmt(
126             "<p>"
127             "<a href=\"%s%s\" name=\"snac-more\">%s</a> - "
128             "<a href=\"%s%s?skip=%d&show=%d\" name=\"snac-more\">%s</a>"
129             "</p>\n",
130-            snac->actor, local ? "" : "/admin", L("Back to top"),
131-            snac->actor, local ? "" : "/admin", skip + show, show, L("Older entries...")
132+            base_url, local ? "" : "/admin", L("Back to top"),
133+            base_url, local ? "" : "/admin", skip + show, show, L("Older entries...")
134         );
135 
136         s = xs_str_cat(s, s1);
137     }
138 
139-    s = html_user_footer(s);
140+    s = html_footer(s);
141 
142     s = xs_str_cat(s, "</body>\n</html>\n");
143 
144@@ -1567,7 +1597,7 @@ xs_str *html_people(snac *snac)
145 
146     s = html_people_list(snac, s, wers, L("People that follow you"), "e");
147 
148-    s = html_user_footer(s);
149+    s = html_footer(s);
150 
151     s = xs_str_cat(s, "</body>\n</html>\n");
152 
153@@ -1684,7 +1714,7 @@ xs_str *html_notifications(snac *snac)
154     else
155         s = xs_str_cat(s, "</div>\n");
156 
157-    s = html_user_footer(s);
158+    s = html_footer(s);
159 
160     s = xs_str_cat(s, "</body>\n</html>\n");
161