diff options
Diffstat (limited to 'html.c')
| -rw-r--r-- | html.c | 68 |
1 files changed, 37 insertions, 31 deletions
| @@ -1,4 +1,4 @@ | |||
| 1 | /* snac - A simple, minimalistic ActivityPub instance */ | 1 | /* snac - A simple, minimalistic ActivityPub instance */ |
| 2 | /* copyright (c) 2022 - 2023 grunfink / MIT license */ | 2 | /* copyright (c) 2022 - 2023 grunfink / MIT license */ |
| 3 | 3 | ||
| 4 | #include "xs.h" | 4 | #include "xs.h" |
| @@ -325,8 +325,8 @@ d_char *html_user_header(snac *snac, d_char *s, int local) | |||
| 325 | s1 = xs_fmt( | 325 | s1 = xs_fmt( |
| 326 | "<a href=\"%s.rss\">%s</a> - " | 326 | "<a href=\"%s.rss\">%s</a> - " |
| 327 | "<a href=\"%s/admin\" rel=\"nofollow\">%s</a></nav>\n", | 327 | "<a href=\"%s/admin\" rel=\"nofollow\">%s</a></nav>\n", |
| 328 | snac->uid, L("RSS"), | 328 | snac->actor, L("RSS"), |
| 329 | snac->uid, L("private")); | 329 | snac->actor, L("private")); |
| 330 | else { | 330 | else { |
| 331 | xs *n_list = notify_list(snac, 1); | 331 | xs *n_list = notify_list(snac, 1); |
| 332 | int n_len = xs_list_len(n_list); | 332 | int n_len = xs_list_len(n_list); |
| @@ -340,14 +340,14 @@ d_char *html_user_header(snac *snac, d_char *s, int local) | |||
| 340 | n_str = xs_str_new(""); | 340 | n_str = xs_str_new(""); |
| 341 | 341 | ||
| 342 | s1 = xs_fmt( | 342 | s1 = xs_fmt( |
| 343 | "<a href=\"../%s\">%s</a> - " | 343 | "<a href=\"%s\">%s</a> - " |
| 344 | "<a href=\"admin\">%s</a> - " | 344 | "<a href=\"%s/admin\">%s</a> - " |
| 345 | "<a href=\"notifications\">%s</a>%s - " | 345 | "<a href=\"%s/notifications\">%s</a>%s - " |
| 346 | "<a href=\"people\">%s</a></nav>\n", | 346 | "<a href=\"%s/people\">%s</a></nav>\n", |
| 347 | snac->uid, L("public"), | 347 | snac->actor, L("public"), |
| 348 | L("private"), | 348 | snac->actor, L("private"), |
| 349 | L("notifications"), n_str, | 349 | snac->actor, L("notifications"), n_str, |
| 350 | L("people")); | 350 | snac->actor, L("people")); |
| 351 | } | 351 | } |
| 352 | 352 | ||
| 353 | s = xs_str_cat(s, s1); | 353 | s = xs_str_cat(s, s1); |
| @@ -394,7 +394,7 @@ d_char *html_top_controls(snac *snac, d_char *s) | |||
| 394 | "<div class=\"snac-note\">\n" | 394 | "<div class=\"snac-note\">\n" |
| 395 | "<details><summary>%s</summary>\n" | 395 | "<details><summary>%s</summary>\n" |
| 396 | "<form autocomplete=\"off\" method=\"post\" " | 396 | "<form autocomplete=\"off\" method=\"post\" " |
| 397 | "action=\"admin/note\" enctype=\"multipart/form-data\">\n" | 397 | "action=\"%s/admin/note\" enctype=\"multipart/form-data\">\n" |
| 398 | "<textarea class=\"snac-textarea\" name=\"content\" " | 398 | "<textarea class=\"snac-textarea\" name=\"content\" " |
| 399 | "rows=\"8\" wrap=\"virtual\" required=\"required\" placeholder=\"What's on your mind?\"></textarea>\n" | 399 | "rows=\"8\" wrap=\"virtual\" required=\"required\" placeholder=\"What's on your mind?\"></textarea>\n" |
| 400 | "<input type=\"hidden\" name=\"in_reply_to\" value=\"\">\n" | 400 | "<input type=\"hidden\" name=\"in_reply_to\" value=\"\">\n" |
| @@ -431,12 +431,12 @@ d_char *html_top_controls(snac *snac, d_char *s) | |||
| 431 | "<div class=\"snac-top-controls-more\">\n" | 431 | "<div class=\"snac-top-controls-more\">\n" |
| 432 | "<details><summary>%s</summary>\n" | 432 | "<details><summary>%s</summary>\n" |
| 433 | 433 | ||
| 434 | "<form autocomplete=\"off\" method=\"post\" action=\"admin/action\">\n" /** follow **/ | 434 | "<form autocomplete=\"off\" method=\"post\" action=\"%s/admin/action\">\n" /** follow **/ |
| 435 | "<input type=\"text\" name=\"actor\" required=\"required\" placeholder=\"bob@example.com\">\n" | 435 | "<input type=\"text\" name=\"actor\" required=\"required\" placeholder=\"bob@example.com\">\n" |
| 436 | "<input type=\"submit\" name=\"action\" value=\"%s\"> %s\n" | 436 | "<input type=\"submit\" name=\"action\" value=\"%s\"> %s\n" |
| 437 | "</form><p>\n" | 437 | "</form><p>\n" |
| 438 | 438 | ||
| 439 | "<form autocomplete=\"off\" method=\"post\" action=\"admin/action\">\n" /** boost **/ | 439 | "<form autocomplete=\"off\" method=\"post\" action=\"%s/admin/action\">\n" /** boost **/ |
| 440 | "<input type=\"text\" name=\"id\" required=\"required\" placeholder=\"https://fedi.example.com/bob/....\">\n" | 440 | "<input type=\"text\" name=\"id\" required=\"required\" placeholder=\"https://fedi.example.com/bob/....\">\n" |
| 441 | "<input type=\"submit\" name=\"action\" value=\"%s\"> %s\n" | 441 | "<input type=\"submit\" name=\"action\" value=\"%s\"> %s\n" |
| 442 | "</form><p>\n" | 442 | "</form><p>\n" |
| @@ -446,7 +446,7 @@ d_char *html_top_controls(snac *snac, d_char *s) | |||
| 446 | 446 | ||
| 447 | "<div class=\"snac-user-setup\">\n" /** user setup **/ | 447 | "<div class=\"snac-user-setup\">\n" /** user setup **/ |
| 448 | "<form autocomplete=\"off\" method=\"post\" " | 448 | "<form autocomplete=\"off\" method=\"post\" " |
| 449 | "action=\"admin/user-setup\" enctype=\"multipart/form-data\">\n" | 449 | "action=\"%s/admin/user-setup\" enctype=\"multipart/form-data\">\n" |
| 450 | "<p>%s:<br>\n" | 450 | "<p>%s:<br>\n" |
| 451 | "<input type=\"text\" name=\"name\" value=\"%s\" placeholder=\"Your name.\"></p>\n" | 451 | "<input type=\"text\" name=\"name\" value=\"%s\" placeholder=\"Your name.\"></p>\n" |
| 452 | 452 | ||
| @@ -531,6 +531,7 @@ d_char *html_top_controls(snac *snac, d_char *s) | |||
| 531 | 531 | ||
| 532 | xs *s1 = xs_fmt(_tmpl, | 532 | xs *s1 = xs_fmt(_tmpl, |
| 533 | L("New Post..."), | 533 | L("New Post..."), |
| 534 | snac->actor, | ||
| 534 | L("Sensitive content"), | 535 | L("Sensitive content"), |
| 535 | L("Sensitive content description"), | 536 | L("Sensitive content description"), |
| 536 | L("Only for mentioned people"), | 537 | L("Only for mentioned people"), |
| @@ -550,10 +551,15 @@ d_char *html_top_controls(snac *snac, d_char *s) | |||
| 550 | L("Post"), | 551 | L("Post"), |
| 551 | 552 | ||
| 552 | L("Operations..."), | 553 | L("Operations..."), |
| 554 | |||
| 555 | snac->actor, | ||
| 553 | L("Follow"), L("(by URL or user@host)"), | 556 | L("Follow"), L("(by URL or user@host)"), |
| 557 | |||
| 558 | snac->actor, | ||
| 554 | L("Boost"), L("(by URL)"), | 559 | L("Boost"), L("(by URL)"), |
| 555 | 560 | ||
| 556 | L("User Settings..."), | 561 | L("User Settings..."), |
| 562 | snac->actor, | ||
| 557 | L("Display name"), | 563 | L("Display name"), |
| 558 | es1, | 564 | es1, |
| 559 | L("Avatar"), | 565 | L("Avatar"), |
| @@ -657,13 +663,13 @@ xs_str *html_entry_controls(snac *snac, xs_str *os, const xs_dict *msg, const ch | |||
| 657 | 663 | ||
| 658 | { | 664 | { |
| 659 | xs *s1 = xs_fmt( | 665 | xs *s1 = xs_fmt( |
| 660 | "<form autocomplete=\"off\" method=\"post\" action=\"admin/action\">\n" | 666 | "<form autocomplete=\"off\" method=\"post\" action=\"%s/admin/action\">\n" |
| 661 | "<input type=\"hidden\" name=\"id\" value=\"%s\">\n" | 667 | "<input type=\"hidden\" name=\"id\" value=\"%s\">\n" |
| 662 | "<input type=\"hidden\" name=\"actor\" value=\"%s\">\n" | 668 | "<input type=\"hidden\" name=\"actor\" value=\"%s\">\n" |
| 663 | "<input type=\"hidden\" name=\"redir\" value=\"%s_entry\">\n" | 669 | "<input type=\"hidden\" name=\"redir\" value=\"%s_entry\">\n" |
| 664 | "\n", | 670 | "\n", |
| 665 | 671 | ||
| 666 | id, actor, md5 | 672 | snac->actor, id, actor, md5 |
| 667 | ); | 673 | ); |
| 668 | 674 | ||
| 669 | s = xs_str_cat(s, s1); | 675 | s = xs_str_cat(s, s1); |
| @@ -717,7 +723,7 @@ xs_str *html_entry_controls(snac *snac, xs_str *os, const xs_dict *msg, const ch | |||
| 717 | xs *s1 = xs_fmt( | 723 | xs *s1 = xs_fmt( |
| 718 | "<p><details><summary>%s</summary>\n" | 724 | "<p><details><summary>%s</summary>\n" |
| 719 | "<p><div class=\"snac-note\" id=\"%s_edit\">\n" | 725 | "<p><div class=\"snac-note\" id=\"%s_edit\">\n" |
| 720 | "<form autocomplete=\"off\" method=\"post\" action=\"admin/note\" " | 726 | "<form autocomplete=\"off\" method=\"post\" action=\"%s/admin/note\" " |
| 721 | "enctype=\"multipart/form-data\" id=\"%s_edit_form\">\n" | 727 | "enctype=\"multipart/form-data\" id=\"%s_edit_form\">\n" |
| 722 | "<textarea class=\"snac-textarea\" name=\"content\" " | 728 | "<textarea class=\"snac-textarea\" name=\"content\" " |
| 723 | "rows=\"4\" wrap=\"virtual\" required=\"required\">%s</textarea>\n" | 729 | "rows=\"4\" wrap=\"virtual\" required=\"required\">%s</textarea>\n" |
| @@ -740,7 +746,7 @@ xs_str *html_entry_controls(snac *snac, xs_str *os, const xs_dict *msg, const ch | |||
| 740 | 746 | ||
| 741 | L("Edit..."), | 747 | L("Edit..."), |
| 742 | md5, | 748 | md5, |
| 743 | md5, | 749 | snac->actor, md5, |
| 744 | prev_src, | 750 | prev_src, |
| 745 | id, | 751 | id, |
| 746 | L("Sensitive content"), | 752 | L("Sensitive content"), |
| @@ -768,7 +774,7 @@ xs_str *html_entry_controls(snac *snac, xs_str *os, const xs_dict *msg, const ch | |||
| 768 | xs *s1 = xs_fmt( | 774 | xs *s1 = xs_fmt( |
| 769 | "<p><details><summary>%s</summary>\n" | 775 | "<p><details><summary>%s</summary>\n" |
| 770 | "<p><div class=\"snac-note\" id=\"%s_reply\">\n" | 776 | "<p><div class=\"snac-note\" id=\"%s_reply\">\n" |
| 771 | "<form autocomplete=\"off\" method=\"post\" action=\"admin/note\" " | 777 | "<form autocomplete=\"off\" method=\"post\" action=\"%s/admin/note\" " |
| 772 | "enctype=\"multipart/form-data\" id=\"%s_reply_form\">\n" | 778 | "enctype=\"multipart/form-data\" id=\"%s_reply_form\">\n" |
| 773 | "<textarea class=\"snac-textarea\" name=\"content\" " | 779 | "<textarea class=\"snac-textarea\" name=\"content\" " |
| 774 | "rows=\"4\" wrap=\"virtual\" required=\"required\">%s</textarea>\n" | 780 | "rows=\"4\" wrap=\"virtual\" required=\"required\">%s</textarea>\n" |
| @@ -791,7 +797,7 @@ xs_str *html_entry_controls(snac *snac, xs_str *os, const xs_dict *msg, const ch | |||
| 791 | 797 | ||
| 792 | L("Reply..."), | 798 | L("Reply..."), |
| 793 | md5, | 799 | md5, |
| 794 | md5, | 800 | snac->actor, md5, |
| 795 | ct, | 801 | ct, |
| 796 | id, | 802 | id, |
| 797 | L("Sensitive content"), | 803 | L("Sensitive content"), |
| @@ -1086,10 +1092,10 @@ xs_str *html_entry(snac *snac, xs_str *os, const xs_dict *msg, int local, | |||
| 1086 | /* poll still active */ | 1092 | /* poll still active */ |
| 1087 | xs *s1 = xs_fmt("<div class=\"snac-poll-form\">\n" | 1093 | xs *s1 = xs_fmt("<div class=\"snac-poll-form\">\n" |
| 1088 | "<form autocomplete=\"off\" " | 1094 | "<form autocomplete=\"off\" " |
| 1089 | "method=\"post\" action=\"admin/vote\">\n" | 1095 | "method=\"post\" action=\"%s/admin/vote\">\n" |
| 1090 | "<input type=\"hidden\" name=\"actor\" value= \"%s\">\n" | 1096 | "<input type=\"hidden\" name=\"actor\" value= \"%s\">\n" |
| 1091 | "<input type=\"hidden\" name=\"irt\" value=\"%s\">\n", | 1097 | "<input type=\"hidden\" name=\"irt\" value=\"%s\">\n", |
| 1092 | actor, id); | 1098 | snac->actor, actor, id); |
| 1093 | 1099 | ||
| 1094 | while (xs_list_iter(&p, &v)) { | 1100 | while (xs_list_iter(&p, &v)) { |
| 1095 | const char *name = xs_dict_get(v, "name"); | 1101 | const char *name = xs_dict_get(v, "name"); |
| @@ -1479,11 +1485,11 @@ d_char *html_people_list(snac *snac, d_char *os, d_char *list, const char *heade | |||
| 1479 | s = xs_str_cat(s, "<div class=\"snac-controls\">\n"); | 1485 | s = xs_str_cat(s, "<div class=\"snac-controls\">\n"); |
| 1480 | 1486 | ||
| 1481 | xs *s1 = xs_fmt( | 1487 | xs *s1 = xs_fmt( |
| 1482 | "<p><form autocomplete=\"off\" method=\"post\" action=\"admin/action\">\n" | 1488 | "<p><form autocomplete=\"off\" method=\"post\" action=\"%s/admin/action\">\n" |
| 1483 | "<input type=\"hidden\" name=\"actor\" value=\"%s\">\n" | 1489 | "<input type=\"hidden\" name=\"actor\" value=\"%s\">\n" |
| 1484 | "<input type=\"hidden\" name=\"actor-form\" value=\"yes\">\n", | 1490 | "<input type=\"hidden\" name=\"actor-form\" value=\"yes\">\n", |
| 1485 | 1491 | ||
| 1486 | actor_id | 1492 | snac->actor, actor_id |
| 1487 | ); | 1493 | ); |
| 1488 | s = xs_str_cat(s, s1); | 1494 | s = xs_str_cat(s, s1); |
| 1489 | 1495 | ||
| @@ -1507,7 +1513,7 @@ d_char *html_people_list(snac *snac, d_char *os, d_char *list, const char *heade | |||
| 1507 | xs *s2 = xs_fmt( | 1513 | xs *s2 = xs_fmt( |
| 1508 | "<p><details><summary>%s</summary>\n" | 1514 | "<p><details><summary>%s</summary>\n" |
| 1509 | "<p><div class=\"snac-note\" id=\"%s_%s_dm\">\n" | 1515 | "<p><div class=\"snac-note\" id=\"%s_%s_dm\">\n" |
| 1510 | "<form autocomplete=\"off\" method=\"post\" action=\"admin/note\" " | 1516 | "<form autocomplete=\"off\" method=\"post\" action=\"%s/admin/note\" " |
| 1511 | "enctype=\"multipart/form-data\" id=\"%s_reply_form\">\n" | 1517 | "enctype=\"multipart/form-data\" id=\"%s_reply_form\">\n" |
| 1512 | "<textarea class=\"snac-textarea\" name=\"content\" " | 1518 | "<textarea class=\"snac-textarea\" name=\"content\" " |
| 1513 | "rows=\"4\" wrap=\"virtual\" required=\"required\"></textarea>\n" | 1519 | "rows=\"4\" wrap=\"virtual\" required=\"required\"></textarea>\n" |
| @@ -1519,7 +1525,7 @@ d_char *html_people_list(snac *snac, d_char *os, d_char *list, const char *heade | |||
| 1519 | 1525 | ||
| 1520 | L("Direct Message..."), | 1526 | L("Direct Message..."), |
| 1521 | md5, t, | 1527 | md5, t, |
| 1522 | md5, | 1528 | snac->actor, md5, |
| 1523 | actor_id, | 1529 | actor_id, |
| 1524 | L("Post") | 1530 | L("Post") |
| 1525 | ); | 1531 | ); |
| @@ -1570,9 +1576,9 @@ xs_str *html_notifications(snac *snac) | |||
| 1570 | 1576 | ||
| 1571 | xs *s1 = xs_fmt( | 1577 | xs *s1 = xs_fmt( |
| 1572 | "<form autocomplete=\"off\" " | 1578 | "<form autocomplete=\"off\" " |
| 1573 | "method=\"post\" action=\"admin/clear-notifications\" id=\"clear\">\n" | 1579 | "method=\"post\" action=\"%s/admin/clear-notifications\" id=\"clear\">\n" |
| 1574 | "<input type=\"submit\" class=\"snac-btn-like\" value=\"%s\">\n" | 1580 | "<input type=\"submit\" class=\"snac-btn-like\" value=\"%s\">\n" |
| 1575 | "</form><p>\n", L("Clear all")); | 1581 | "</form><p>\n", snac->actor, L("Clear all")); |
| 1576 | s = xs_str_cat(s, s1); | 1582 | s = xs_str_cat(s, s1); |
| 1577 | 1583 | ||
| 1578 | while (xs_list_iter(&p, &v)) { | 1584 | while (xs_list_iter(&p, &v)) { |
| @@ -2372,9 +2378,9 @@ int html_post_handler(const xs_dict *req, const char *q_path, | |||
| 2372 | char *redir = xs_dict_get(p_vars, "redir"); | 2378 | char *redir = xs_dict_get(p_vars, "redir"); |
| 2373 | 2379 | ||
| 2374 | if (xs_is_null(redir)) | 2380 | if (xs_is_null(redir)) |
| 2375 | redir = ""; | 2381 | redir = "snac-posts"; |
| 2376 | 2382 | ||
| 2377 | *body = xs_fmt("../admin#%s", redir); | 2383 | *body = xs_fmt("%s/admin#%s", snac.actor, redir); |
| 2378 | *b_size = strlen(*body); | 2384 | *b_size = strlen(*body); |
| 2379 | } | 2385 | } |
| 2380 | 2386 | ||