From 619184d02ebf6e0df98eb7efb1c3bf4b4519e936 Mon Sep 17 00:00:00 2001 From: trisua Date: Mon, 31 Mar 2025 15:39:49 -0400 Subject: [PATCH] add: ability to join/leave/be banned from communities --- crates/app/src/assets.rs | 2 +- crates/app/src/langs/en-US.toml | 4 + crates/app/src/macros.rs | 4 +- crates/app/src/main.rs | 2 +- .../app/src/public/html/communities/base.html | 60 +++++- .../app/src/public/html/communities/feed.html | 2 +- .../src/public/html/communities/settings.html | 200 ++++++++++++++++-- crates/app/src/public/html/profile/base.html | 2 +- .../app/src/public/html/profile/settings.html | 45 ++-- crates/app/src/public/js/atto.js | 9 +- crates/app/src/routes/api/v1/auth/images.rs | 12 +- crates/app/src/routes/api/v1/auth/profile.rs | 26 +-- crates/app/src/routes/api/v1/auth/social.rs | 10 +- .../routes/api/v1/communities/communities.rs | 194 ++++++++++++++++- .../src/routes/api/v1/communities/images.rs | 18 +- .../src/routes/api/v1/communities/posts.rs | 8 +- crates/app/src/routes/api/v1/mod.rs | 23 ++ crates/app/src/routes/api/v1/notifications.rs | 6 +- crates/app/src/routes/api/v1/reactions.rs | 4 +- crates/app/src/routes/pages/auth.rs | 12 +- crates/app/src/routes/pages/communities.rs | 82 +++---- crates/app/src/routes/pages/misc.rs | 8 +- crates/app/src/routes/pages/mod.rs | 4 +- crates/app/src/routes/pages/profile.rs | 8 +- crates/core/src/database/memberships.rs | 14 +- crates/core/src/database/posts.rs | 48 +++-- crates/core/src/database/reactions.rs | 2 +- .../core/src/model/communities_permissions.rs | 6 +- 28 files changed, 618 insertions(+), 197 deletions(-) diff --git a/crates/app/src/assets.rs b/crates/app/src/assets.rs index 98a0479..36b86ec 100644 --- a/crates/app/src/assets.rs +++ b/crates/app/src/assets.rs @@ -200,7 +200,7 @@ pub(crate) async fn init_dirs(config: &Config) { } /// A random ASCII value inserted into the URL of static assets to "break" the cache. Essentially just for cache busting. -pub(crate) static CACHE_BREAKER: LazyLock = LazyLock::new(|| salt()); +pub(crate) static CACHE_BREAKER: LazyLock = LazyLock::new(salt); /// Create the initial template context. pub(crate) async fn initial_context( diff --git a/crates/app/src/langs/en-US.toml b/crates/app/src/langs/en-US.toml index 0527138..3ec9cc4 100644 --- a/crates/app/src/langs/en-US.toml +++ b/crates/app/src/langs/en-US.toml @@ -28,6 +28,7 @@ version = "1.0.0" "auth:label.recent_posts" = "Recent posts" "communities:action.create" = "Create" +"communities:action.select" = "Select" "communities:label.create_new" = "Create new community" "communities:label.name" = "Name" "communities:action.join" = "Join" @@ -39,6 +40,9 @@ version = "1.0.0" "communities:label.create_reply" = "Create reply" "communities:label.replies" = "Replies" "communities:action.continue_thread" = "Continue thread" +"communities:tab.members" = "Members" +"communities:label.select_member" = "Select member" +"communities:label.user_id" = "User ID" "notifs:action.mark_as_read" = "Mark as read" "notifs:action.mark_as_unread" = "Mark as unread" diff --git a/crates/app/src/macros.rs b/crates/app/src/macros.rs index 2c537c2..94c5404 100644 --- a/crates/app/src/macros.rs +++ b/crates/app/src/macros.rs @@ -7,7 +7,7 @@ macro_rules! write_template { ($into:ident->$path:literal($as:expr) --config=$config:ident) => { std::fs::write( $into.join($path), - crate::assets::replace_in_html($as, &$config).await, + $crate::assets::replace_in_html($as, &$config).await, ) .unwrap(); }; @@ -29,7 +29,7 @@ macro_rules! write_template { std::fs::write( $into.join($path), - crate::assets::replace_in_html($as, &$config).await, + $crate::assets::replace_in_html($as, &$config).await, ) .unwrap(); }; diff --git a/crates/app/src/main.rs b/crates/app/src/main.rs index 29def3a..aa351da 100644 --- a/crates/app/src/main.rs +++ b/crates/app/src/main.rs @@ -17,7 +17,7 @@ use tokio::sync::RwLock; pub(crate) type State = Arc>; fn render_markdown(value: &Value, _: &HashMap) -> tera::Result { - Ok(tetratto_shared::markdown::render_markdown(&value.as_str().unwrap()).into()) + Ok(tetratto_shared::markdown::render_markdown(value.as_str().unwrap()).into()) } #[tokio::main] diff --git a/crates/app/src/public/html/communities/base.html b/crates/app/src/public/html/communities/base.html index 2ebbfaa..31b9d33 100644 --- a/crates/app/src/public/html/communities/base.html +++ b/crates/app/src/public/html/communities/base.html @@ -29,16 +29,63 @@ {% if user %}
- {% if not is_owner %} {% if not is_member %} - + + {% else %} - + + {% endif %} {% else %} ID
+
+ Members + {{ community.member_count }} +
+
Score
diff --git a/crates/app/src/public/html/communities/feed.html b/crates/app/src/public/html/communities/feed.html index 9175ef5..4bc2300 100644 --- a/crates/app/src/public/html/communities/feed.html +++ b/crates/app/src/public/html/communities/feed.html @@ -1,7 +1,7 @@ {% import "macros.html" as macros %} {% import "components.html" as components %} {% extends "communities/base.html" %} {% block content %}
- {% if user %} + {% if user and can_post %}
-
-
+
+
Read access @@ -30,7 +34,7 @@
- Write access + Post permission
@@ -42,6 +46,18 @@
+ +
+ + + + {{ icon "arrow-left" }} + {{ text "general:action.back" }} + +
-
- + + +