{% extends "root.html" %} {% block head %} <title>{{ community.context.display_name }} - {{ config.name }}</title> {% endblock %} {% block body %} {{ macros::nav() }} <article> <div class="content_container flex flex-col gap-4"> {{ components::community_banner(id=community.id, community=community) }} <div class="w-full flex gap-4 flex-collapse"> <div class="lhs flex flex-col gap-2 sm:w-full" style="width: 20rem; min-width: 20rem" > <div class="card-nest w-full"> <div class="card flex gap-2" id="community_avatar_and_name"> {{ components::community_avatar(id=community.id, community=community, size="72px") }} <div class="flex flex-col"> <div class="flex gap-2 items-center"> <h3 id="title" class="title name shorter flex gap-2" > <!-- prettier-ignore --> {% if community.context.display_name %} {{ community.context.display_name }} {% else %} {{ community.title }} {% endif %} {% if community.context.is_nsfw %} <span title="NSFW community" class="flex items-center" style="color: var(--color-primary)" > {{ icon "square-asterisk" }} </span> {% endif %} </h3> {% if user %} {% if user.id != community.owner %} <div class="dropdown"> <button class="camo small" onclick="trigger('atto::hooks::dropdown', [event])" exclude="dropdown" > {{ icon "ellipsis" }} </button> <div class="inner"> <button class="red" onclick="trigger('me::report', ['{{ community.id }}', 'community'])" > {{ icon "flag" }} <span >{{ text "general:action.report" }}</span > </button> </div> </div> {% endif %} {% endif %} </div> <span class="fade">{{ community.title }}</span> </div> </div> {% if user %} <div class="card flex gap-2" id="join_or_leave"> {% if not is_owner %} {% if not is_joined %} {% if not is_pending %} <button class="primary" onclick="join_community()"> {{ icon "circle-plus" }} <span>{{ text "communities:action.join" }}</span> </button> <script> globalThis.join_community = () => { fetch( "/api/v1/communities/{{ community.id }}/join", { method: "POST", }, ) .then((res) => res.json()) .then((res) => { trigger("atto::toast", [ res.ok ? "success" : "error", res.message, ]); setTimeout(() => { window.location.reload(); }, 150); }); }; </script> {% else %} <button class="quaternary red" onclick="cancel_request()" > {{ icon "x" }} <span >{{ text "communities:action.cancel_request" }}</span > </button> <script> globalThis.cancel_request = async () => { if ( !(await trigger("atto::confirm", [ "Are you sure you would like to do this?", ])) ) { return; } fetch( "/api/v1/communities/{{ community.id }}/memberships/{{ user.id }}", { method: "DELETE", }, ) .then((res) => res.json()) .then((res) => { trigger("atto::toast", [ res.ok ? "success" : "error", res.message, ]); setTimeout(() => { window.location.reload(); }, 150); }); }; </script> {% endif %} {% else %} <button class="quaternary red" onclick="leave_community()" > {{ icon "circle-minus" }} <span>{{ text "communities:action.leave" }}</span> </button> <script> globalThis.leave_community = async () => { if ( !(await trigger("atto::confirm", [ "Are you sure you would like to do this?", ])) ) { return; } fetch( "/api/v1/communities/{{ community.id }}/memberships/{{ user.id }}", { method: "DELETE", }, ) .then((res) => res.json()) .then((res) => { trigger("atto::toast", [ res.ok ? "success" : "error", res.message, ]); setTimeout(() => { window.location.reload(); }, 150); }); }; </script> {% endif %} {% endif %} {% if can_manage_community or is_manager %} <a href="/community/{{ community.title }}/manage" class="button primary" > {{ icon "settings" }} <span >{{ text "communities:action.configure" }}</span > </a> {% endif %} </div> {% endif %} </div> <div class="card-nest flex flex-col"> <div id="bio" class="card small"> {{ community.context.description|markdown|safe }} </div> <div class="card flex flex-col gap-2"> <div class="w-full flex justify-between items-center"> <span class="notification chip">ID</span> <button title="Copy" onclick="trigger('atto::copy_text', ['{{ community.id }}'])" class="camo small" > {{ icon "copy" }} </button> </div> <div class="w-full flex justify-between items-center"> <span class="notification chip">Created</span> <span class="date">{{ community.created }}</span> </div> <div class="w-full flex justify-between items-center"> <span class="notification chip">Members</span> <a href="/community/{{ community.title }}/members" >{{ community.member_count }}</a > </div> <div class="w-full flex justify-between items-center"> <span class="notification chip">Score</span> <div class="flex gap-2"> <b >{{ community.likes - community.dislikes }}</b > {% if user %} <div class="flex gap-1 reactions_box" hook="check_reactions" hook-arg:id="{{ community.id }}" > {{ components::likes(id=community.id, asset_type="Community", likes=community.likes, dislikes=community.dislikes) }} </div> {% endif %} </div> </div> </div> </div> </div> <div class="rhs w-full"> {% if can_read %} {% block content %}{% endblock %} {% else %} <div class="card-nest"> <div class="card small flex items-center gap-2"> {{ icon "frown" }} <b >{{ text "communities:label.not_allowed_to_read" }}</b > </div> <div class="card"> <span> {{ text "communities:label.might_need_to_join" }} </span> </div> </div> {% endif %} </div> </div> </div> </article> {% endblock %}