diff --git a/crates/app/src/public/html/macros.lisp b/crates/app/src/public/html/macros.lisp
index 9f3a66d..73ec5e1 100644
--- a/crates/app/src/public/html/macros.lisp
+++ b/crates/app/src/public/html/macros.lisp
@@ -198,6 +198,7 @@
(text "{% macro profile_nav(selected=\"\") -%}")
(div
("class" "pillmenu")
+ (text "{% if is_self or is_helper or not profile.settings.hide_extra_post_tabs -%}")
(a
("href" "/@{{ profile.username }}")
("class" "{% if selected == 'posts' -%}active{%- endif %}")
@@ -213,16 +214,16 @@
("class" "{% if selected == 'media' -%}active{%- endif %}")
(str (text "auth:label.media")))
- (text "{% if is_self or is_helper %}")
+ (text "{% if is_self or is_helper -%}")
(a
("href" "/@{{ profile.username }}/outbox")
("class" "{% if selected == 'outbox' -%}active{%- endif %}")
(str (text "auth:label.outbox")))
- (text "{% endif %}")
+ (text "{%- endif %}")
- (text "{% if is_helper %}")
+ (text "{% if is_helper -%}")
(a
("href" "/requests?id={{ profile.id }}")
(str (text "requests:label.requests")))
- (text "{% endif %}"))
+ (text "{%- endif %} {%- endif %}"))
(text "{%- endmacro %}")
diff --git a/crates/app/src/public/html/misc/requests.lisp b/crates/app/src/public/html/misc/requests.lisp
index 558ea6a..374ee31 100644
--- a/crates/app/src/public/html/misc/requests.lisp
+++ b/crates/app/src/public/html/misc/requests.lisp
@@ -70,7 +70,7 @@
(span
(text "{{ text \"requests:label.user_follow_request_message\" }}"))
(div
- ("class" "card flex w-full secondary gap-2")
+ ("class" "card flex flex-wrap w-full secondary gap-2")
(a
("href" "/api/v1/auth/user/find/{{ request.id }}")
("class" "button")
diff --git a/crates/app/src/public/html/profile/settings.lisp b/crates/app/src/public/html/profile/settings.lisp
index 8e091a6..f4c2a08 100644
--- a/crates/app/src/public/html/profile/settings.lisp
+++ b/crates/app/src/public/html/profile/settings.lisp
@@ -1247,6 +1247,16 @@
\"{{ profile.settings.private_last_seen }}\",
\"checkbox\",
],
+ [
+ [\"hide_extra_post_tabs\", \"Hide extra post tabs (replies, media)\"],
+ \"{{ profile.settings.hide_extra_post_tabs }}\",
+ \"checkbox\",
+ ],
+ [
+ [\"show_nsfw\", \"Show NSFW posts\"],
+ \"{{ profile.settings.show_nsfw }}\",
+ \"checkbox\",
+ ],
[[], \"Questions\", \"title\"],
[
[
diff --git a/crates/app/src/public/html/root.lisp b/crates/app/src/public/html/root.lisp
index d576077..b3eb385 100644
--- a/crates/app/src/public/html/root.lisp
+++ b/crates/app/src/public/html/root.lisp
@@ -271,25 +271,20 @@
("onsubmit" "event.preventDefault()")
(div ("id" "tokens") ("style" "display: contents"))
- (a
- ("href" "/auth/login")
- ("class" "button")
- ("data-turbo", "false")
- (icon (text "plus"))
- (span (str (text "general:action.add_account"))))
-
(div
("class" "flex justify-between")
- (div null?)
+ (a
+ ("href" "/auth/login")
+ ("class" "button")
+ ("data-turbo", "false")
+ (icon (text "plus"))
+ (span (str (text "general:action.add_account"))))
- (div
- ("class" "flex gap-2")
- (button
- ("class" "quaternary")
- ("onclick" "document.getElementById('tokens_dialog').close()")
- ("type" "button")
- (icon (text "check"))
- (span "{{ text \"dialog:action.okay\" }}")))))))
+ (button
+ ("class" "quaternary")
+ ("onclick" "document.getElementById('tokens_dialog').close()")
+ ("type" "button")
+ (icon (text "check")))))))
; user scripts
(text "{%- endif %} {% if user and use_user_theme -%} {{ components::theme(user=user, theme_preference=user.settings.theme_preference) }}
diff --git a/crates/app/src/public/js/me.js b/crates/app/src/public/js/me.js
index 18099e0..d72a9d3 100644
--- a/crates/app/src/public/js/me.js
+++ b/crates/app/src/public/js/me.js
@@ -438,7 +438,7 @@
["object"],
);
- self.define("login", ({ $ }, username) => {
+ self.define("login", (_, username) => {
const token = self.LOGIN_ACCOUNT_TOKENS[username];
if (!token) {
@@ -448,20 +448,41 @@
window.location.href = `/api/v1/auth/token?token=${token}`;
});
+ self.define("remove_token", async (_, username) => {
+ if (
+ !(await trigger("atto::confirm", [
+ "Are you sure you would like to do this?",
+ ]))
+ ) {
+ return;
+ }
+
+ delete self.LOGIN_ACCOUNT_TOKENS[username];
+ self.set_login_account_tokens(self.LOGIN_ACCOUNT_TOKENS);
+
+ trigger("atto::toast", ["success", "Token removed"]);
+ });
+
self.define("render_token_picker", ({ $ }, element) => {
element.innerHTML = "";
for (const token of Object.entries($.LOGIN_ACCOUNT_TOKENS)) {
- element.innerHTML += `