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 += ``; + ${token[0]} + + + + `; } }); diff --git a/crates/core/src/database/posts.rs b/crates/core/src/database/posts.rs index b7fc362..b9cc171 100644 --- a/crates/core/src/database/posts.rs +++ b/crates/core/src/database/posts.rs @@ -435,8 +435,6 @@ impl DataManager { page: usize, user: &Option, ) -> Result> { - let other_user = self.get_user_by_id(id).await?; - let conn = match self.connect().await { Ok(c) => c, Err(e) => return Err(Error::DatabaseConnection(e.to_string())), @@ -446,13 +444,7 @@ impl DataManager { let mut hide_nsfw: bool = true; if let Some(ua) = user { - if ua.id == other_user.id { - hide_nsfw = false - } - } - - if other_user.settings.private_profile { - hide_nsfw = false; + hide_nsfw = !ua.settings.show_nsfw; } // ... @@ -490,8 +482,6 @@ impl DataManager { page: usize, user: &Option, ) -> Result> { - let other_user = self.get_user_by_id(id).await?; - let conn = match self.connect().await { Ok(c) => c, Err(e) => return Err(Error::DatabaseConnection(e.to_string())), @@ -501,13 +491,7 @@ impl DataManager { let mut hide_nsfw: bool = true; if let Some(ua) = user { - if ua.id == other_user.id { - hide_nsfw = false - } - } - - if other_user.settings.private_profile { - hide_nsfw = false; + hide_nsfw = !ua.settings.show_nsfw; } // ... @@ -545,8 +529,6 @@ impl DataManager { page: usize, user: &Option, ) -> Result> { - let other_user = self.get_user_by_id(id).await?; - let conn = match self.connect().await { Ok(c) => c, Err(e) => return Err(Error::DatabaseConnection(e.to_string())), @@ -556,13 +538,7 @@ impl DataManager { let mut hide_nsfw: bool = true; if let Some(ua) = user { - if ua.id == other_user.id { - hide_nsfw = false - } - } - - if other_user.settings.private_profile { - hide_nsfw = false; + hide_nsfw = !ua.settings.show_nsfw; } // ... @@ -603,8 +579,6 @@ impl DataManager { text_query: &str, user: &Option<&User>, ) -> Result> { - let other_user = self.get_user_by_id(id).await?; - let conn = match self.connect().await { Ok(c) => c, Err(e) => return Err(Error::DatabaseConnection(e.to_string())), @@ -614,13 +588,7 @@ impl DataManager { let mut hide_nsfw: bool = true; if let Some(ua) = user { - if ua.id == other_user.id { - hide_nsfw = false - } - } - - if other_user.settings.private_profile { - hide_nsfw = false; + hide_nsfw = !ua.settings.show_nsfw; } // ... @@ -697,8 +665,6 @@ impl DataManager { page: usize, user: &Option, ) -> Result> { - let other_user = self.get_user_by_id(id).await?; - let conn = match self.connect().await { Ok(c) => c, Err(e) => return Err(Error::DatabaseConnection(e.to_string())), @@ -708,13 +674,7 @@ impl DataManager { let mut hide_nsfw: bool = true; if let Some(ua) = user { - if ua.id == other_user.id { - hide_nsfw = false - } - } - - if other_user.settings.private_profile { - hide_nsfw = false; + hide_nsfw = !ua.settings.show_nsfw; } // ... diff --git a/crates/core/src/model/auth.rs b/crates/core/src/model/auth.rs index 2b386b1..93a53c2 100644 --- a/crates/core/src/model/auth.rs +++ b/crates/core/src/model/auth.rs @@ -216,6 +216,12 @@ pub struct UserSettings { /// Require an account to view the user's profile. #[serde(default)] pub require_account: bool, + /// If NSFW content should be shown. + #[serde(default)] + pub show_nsfw: bool, + /// If extra post tabs are hidden (replies, media). + #[serde(default)] + pub hide_extra_post_tabs: bool, } fn mime_avif() -> String {