add: close friends stack

This commit is contained in:
trisua 2025-08-31 13:02:15 -04:00
parent 407155e6c4
commit 5fafc8d7b9
83 changed files with 479 additions and 213 deletions

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Chats - {{ config.name }}"))
(text "Chats {{ config.name }}"))
(link ("rel" "stylesheet") ("data-turbo-temporary" "true") ("href" "/css/chats.css?v=tetratto-{{ random_cache_breaker }}"))
(text "{% endblock %} {% block body %} {{ macros::nav(selected=\"chats\", hide_user_menu=true) }}")
(nav

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "{{ community.context.display_name }} - {{ config.name }}"))
(text "{{ community.context.display_name }} {{ config.name }}"))
(meta
("name" "og:title")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Create post - {{ config.name }}"))
(text "Create post {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main
@ -98,13 +98,13 @@
("selected" "{% if selected_community == community.id -%}true{% else %}false{%- endif %}")
(text "{% if community.context.display_name -%} {{ community.context.display_name }} {% else %} {{ community.title }} {%- endif %}"))
(text "{% endfor %}")
(text "{% for stack in stacks %}")
(text "{% for stack in stacks %} {% if not stack.is_locked or user.id == stack.owner -%}")
(option
("value" "{{ stack.id }}")
("selected" "{% if selected_stack == stack.id -%}true{% else %}false{%- endif %}")
("is_stack" "true")
(text "{{ stack.name }} (circle)"))
(text "{% endfor %}")))
(text "{%- endif %} {% endfor %}")))
(form
("class" "card flex flex_col gap_2")
("id" "create_form")
@ -445,7 +445,7 @@
element.setAttribute(\"alt\", `${id}'s avatar`);
if (id === town_square || is_stack) {
element.src = `/api/v1/auth/user/${user_id}/avatar?selector_type=id`;
element.src = `${_app_base.service_hosts.buckets}/avatars/${user_id}`;
} else {
element.src = `/api/v1/communities/${id}/avatar`;
}

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "My communities - {{ config.name }}"))
(text "My communities {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav(selected=\"communities\") }}")
(main
@ -19,7 +19,7 @@
("class" "flex flex_col gap_1")
(label
("for" "title")
(text "{{ text \"communities:label.name\" }}"))
(str (text "communities:label.name")))
(input
("type" "text")
("name" "title")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Question - {{ config.name }}"))
(text "Question {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Search communities - {{ config.name }}"))
(text "Search communities {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav(selected=\"communities\") }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Community settings - {{ config.name }}"))
(text "Community settings {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main
("class" "flex flex_col gap_2")
@ -145,7 +145,7 @@
("required" "")
("minlength" "2")))
(button
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.save\" }}"))))))
(div
@ -168,7 +168,7 @@
("class" "flex gap_2 flex_wrap")
(button
("onclick" "save_context()")
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.save\" }}")))
(a
@ -200,7 +200,7 @@
("class" "w_content"))
(button
("class" "small square big_icon")
(text "{{ icon \"check\" }}"))))
(icon (text "check")))))
(div
("class" "card_nest")
("ui_ident" "change_banner")
@ -223,7 +223,7 @@
("class" "w_content"))
(button
("class" "small square big_icon")
(text "{{ icon \"check\" }}")))
(icon (text "check"))))
(span
("class" "fade")
(text "Use an image of 1100x350px for the best results.")))))
@ -271,7 +271,7 @@
(button
("class" "small lowered")
("onclick" "update_user_role(document.getElementById('uid').value, document.getElementById('role').value)")
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.save\" }}"))))
(div
@ -294,7 +294,7 @@
("class" "flex flex_col gap_1")
(label
("for" "title")
(text "{{ text \"communities:label.name\" }}"))
(str (text "communities:label.name")))
(input
("type" "text")
("name" "title")
@ -453,7 +453,7 @@
("class" "flex flex_col gap_1")
(label
("for" "name")
(text "{{ text \"communities:label.name\" }}"))
(str (text "communities:label.name")))
(input
("type" "text")
("name" "name")
@ -599,7 +599,7 @@
("class" "flex flex_col gap_1")
(label
("for" "title")
(text "{{ text \"communities:label.name\" }}"))
(str (text "communities:label.name")))
(input
("type" "text")
("name" "title")
@ -677,7 +677,7 @@
("class" "flex flex_col gap_1")
(label
("for" "title")
(text "{{ text \"communities:label.name\" }}"))
(str (text "communities:label.name")))
(input
("type" "text")
("name" "title")

View file

@ -137,7 +137,7 @@
("style" "display: contents")
(text "{{ self::post(post=post, owner=owner, secondary=secondary, community=community, show_community=show_community, can_manage_post=can_manage_post, repost=repost, expect_repost=true) }}"))
(text "{%- endmacro %}")
(text "{% macro post_info(post, community) -%}")
(text "{% macro post_info(post, community, owner) -%}")
; info about the post: edited, date, etc.
(text "{% if post.context.edited != 0 -%}")
(div
@ -167,7 +167,7 @@
(text "{%- endif %} {% if post.stack -%}")
(a
("title" "Posted to a stack you're in")
("class" "flex items_center flush")
("class" "flex items_center flush {% if post.stack == owner.close_friends_stack -%} green {%- endif %}")
("style" "color: var(--color-primary)")
("href" "/stacks/{{ post.stack }}")
(text "{{ icon \"layers\" }}"))
@ -386,7 +386,7 @@
(span
; ("class" "name")
(text "{{ self::full_username(user=owner) }}"))
(text "{{ self::post_info(post=post, community=community) }}")
(text "{{ self::post_info(post=post, community=community, owner=owner) }}")
(text "{% if post.context.is_pinned or post.context.is_profile_pinned -%} {{ icon \"pin\" }} {%- endif %}"))
(text "{% if not dont_show_title and post.title and community and community.context.enable_titles -%}")
; post has a title AND whatever is rendering this component wants to see it
@ -516,7 +516,7 @@
(button
("class" "green raised")
("onclick" "trigger('me::update_notification_read_status', ['{{ notification.id }}', true])")
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"notifs:action.mark_as_read\" }}")))
(text "{%- endif %}")
@ -552,7 +552,7 @@
(text "{{ self::community_avatar(id=post.community, community=community, size=\"18px\") }}")))
(div
("class" "flex gap_2")
(text "{{ self::post_info(post=post, community=community) }}")))
(text "{{ self::post_info(post=post, community=community, owner=owner) }}")))
(div
("class" "card_nest_horizontal")
; author info
@ -630,7 +630,7 @@
("class" "flex justify_between gap_2 w_full")
(text "{% if page > 0 -%}")
(a
("class" "button lowered")
("class" "button lowered pagination_previous")
("href" "?page={{ page - 1 }}{{ key }}{{ value }}")
(text "{{ icon \"arrow-left\" }}")
(span
@ -639,7 +639,7 @@
(div)
(text "{%- endif %} {% if items != 0 -%}")
(a
("class" "button lowered")
("class" "button lowered pagination_next")
("href" "?page={{ page + 1 }}{{ key }}{{ value }}")
(span
(text "{{ text \"general:link.next\" }}"))
@ -2168,7 +2168,15 @@
("class" "card secondary flex flex_col gap_2")
(div
("class" "flex items_center gap_2")
(text "{{ icon \"list\" }}")
(text "{% if stack.is_locked -%}")
(span
("class" "red")
("title" "Locked stack")
(icon (text "lock")))
(text "{% else %}")
(icon (text "list"))
(text "{%- endif %}")
(b
(text "{{ stack.name }}")))
(span

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "{{ app.title }} - {{ config.name }}"))
(text "{{ app.title }} {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main
@ -93,7 +93,7 @@
("required" "")
("minlength" "2")))
(button
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.save\" }}")))))
(div
@ -118,7 +118,7 @@
("required" "")
("minlength" "2")))
(button
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.save\" }}")))))
(div
@ -143,7 +143,7 @@
("required" "")
("minlength" "2")))
(button
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.save\" }}")))))
(div
@ -183,7 +183,7 @@
(icon (text "external-link")) (text "Docs"))))
(button
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.save\" }}")))))
(div

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Developer panel - {{ config.name }}"))
(text "Developer panel {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav(selected=\"\") }}")
(main
@ -21,7 +21,7 @@
("class" "flex flex_col gap_1")
(label
("for" "title")
(text "{{ text \"communities:label.name\" }}"))
(str (text "communities:label.name")))
(input
("type" "text")
("name" "title")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "{{ app.title }} - {{ config.name }}"))
(text "{{ app.title }} {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Manage product - {{ config.name }}"))
(text "Manage product {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav(selected=\"\") }}")
(main
("class" "flex flex_col gap_2")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Manage advertisement - {{ config.name }}"))
(text "Manage advertisement {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav(selected=\"\") }}")
(main
("class" "flex flex_col gap_2")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "{{ product.title }} - {{ config.name }}"))
(text "{{ product.title }} {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav(selected=\"\") }}")
(main
("class" "flex flex_col gap_2")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "My products - {{ config.name }}"))
(text "My products {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav(selected=\"products\") }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Wallet - {{ config.name }}"))
(text "Wallet {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav(selected=\"wallet\") }}")
(main
("class" "flex flex_col gap_2")

View file

@ -2,7 +2,7 @@
; changes to be more github-like instead of retrospring-like
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "{{ community.context.display_name }} - {{ config.name }}"))
(text "{{ community.context.display_name }} {{ config.name }}"))
(meta
("name" "og:title")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Forge - {{ config.name }}"))
(text "Forge {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav(selected=\"\") }}")
(main
@ -20,7 +20,7 @@
("class" "flex flex_col gap_1")
(label
("for" "title")
(text "{{ text \"communities:label.name\" }}"))
(str (text "communities:label.name")))
(input
("type" "text")
("name" "title")

View file

@ -5,7 +5,7 @@
(text "{% else %}")
(title (text "{{ journal.title }}"))
(text "{%- endif %} {% else %}")
(title (text "Journals - {{ config.name }}"))
(title (text "Journals {{ config.name }}"))
(text "{%- endif %}")
(text "{% if note and journal and owner -%}")
@ -253,7 +253,7 @@
("required" "")
("minlength" "2")))
(button
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.save\" }}")))))))

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "My services - {{ config.name }}"))
(text "My services {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "My domains - {{ config.name }}"))
(text "My domains {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main
@ -35,7 +35,7 @@
("class" "flex flex_col gap_1")
(label
("for" "name")
(text "{{ text \"communities:label.name\" }}"))
(str (text "communities:label.name")))
(input
("type" "text")
("name" "name")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "My services - {{ config.name }}"))
(text "My services {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "My services - {{ config.name }}"))
(text "My services {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main
@ -35,7 +35,7 @@
("class" "flex flex_col gap_1")
(label
("for" "name")
(text "{{ text \"communities:label.name\" }}"))
(str (text "communities:label.name")))
(input
("type" "text")
("name" "name")

View file

@ -387,4 +387,10 @@
(text "{{ icon \"cable\" }}")
(span
(text "{{ text \"settings:tab.grants\" }}")))
(a
("data-tab-button" "friends")
("href" "#/friends")
(text "{{ icon \"book-user\" }}")
(span
(text "{{ text \"settings:tab.close_friends\" }}")))
(text "{%- endmacro %}")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Compose letter - {{ config.name }}"))
(text "Compose letter {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Letter - {{ config.name }}"))
(text "Letter {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main
("class" "flex flex_col gap_2")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Received mail - {{ config.name }}"))
(text "Received mail {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main
("class" "flex flex_col gap_2")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Sent mail - {{ config.name }}"))
(text "Sent mail {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main
("class" "flex flex_col gap_2")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Achievements - {{ config.name }}"))
(text "Achievements {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav(selected=\"achievements\") }}")
(main

View file

@ -1,5 +1,5 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title (text "{{ error_text }} - {{ config.name }}"))
(title (text "{{ error_text }} {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,5 +1,5 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title (text "{{ file_name }} - {{ config.name }}"))
(title (text "{{ file_name }} {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Notifications - {{ config.name }}"))
(text "Notifications {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav(selected=\"notifications\") }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Requests - {{ config.name }}"))
(text "Requests {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav(selected=\"requests\") }}")
(main
@ -83,7 +83,7 @@
(button
("class" "lowered green")
("onclick" "accept_follow_request(event, '{{ request.id }}')")
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.accept\" }}")))
(button
@ -114,7 +114,7 @@
(button
("class" "lowered green")
("onclick" "accept_transfer_request(event, '{{ request.id }}', '{{ request.linked_asset }}', {{ request.data.Int32 }})")
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.accept\" }}")))
(button

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Audit log - {{ config.name }}"))
(text "Audit log {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "File report - {{ config.name }}"))
(text "File report {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "IP Bans - {{ config.name }}"))
(text "IP Bans {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Manage profile - {{ config.name }}"))
(text "Manage profile {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main
@ -356,7 +356,7 @@
(button
("class" "small lowered")
("onclick" "update_user_role(Number.parseInt(document.getElementById('role').value))")
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.save\" }}"))))
(div
@ -374,7 +374,7 @@
(button
("class" "small lowered")
("onclick" "update_user_secondary_role(Number.parseInt(document.getElementById('secondary_role').value))")
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.save\" }}"))))
(div

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Reports - {{ config.name }}"))
(text "Reports {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Server stats - {{ config.name }}"))
(text "Server stats {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "User warnings - {{ config.name }}"))
(text "User warnings {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Post likes - {{ config.name }}"))
(text "Post likes {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Post - {{ config.name }}"))
(text "Post {{ config.name }}"))
(meta
("name" "og:title")
@ -146,7 +146,7 @@
("id" "post_context")))
(button
("onclick" "save_context()")
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.save\" }}")))
(script

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Post quotes - {{ config.name }}"))
(text "Post quotes {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Post reposts - {{ config.name }}"))
(text "Post reposts {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "{{ profile.username }} (banned) - {{ config.name }}"))
(text "{{ profile.username }} (banned) {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "{{ profile.username }} - {{ config.name }}"))
(text "{{ profile.username }} {{ config.name }}"))
(meta
("name" "og:title")
@ -57,7 +57,15 @@
(div
("class" "card flex gap_2")
("id" "user_avatar_and_name")
(text "{{ components::avatar(id=profile.id,size=\"72px\") }}")
(text "{% if user and close_friends_stack and (user.id in close_friends_stack.users) -%}")
(a
("style" "border: solid 2px var(--color-yellow); border-radius: calc(var(--radius) / 1.2); height: max-content")
("href" "/stacks/{{ close_friends_stack.id }}")
(text "{{ components::avatar(id=profile.id, size=\"72px\") }}"))
(text "{% else %}")
(text "{{ components::avatar(id=profile.id, size=\"72px\") }}")
(text "{%- endif %}")
(div
("class" "flex flex_col")
(h3
@ -131,13 +139,21 @@
(span
(text "{{ text \"auth:label.following\" }}"))))
(text "{%- endif %}")
(text "{% if is_following_you -%}")
(b
("class" "notification chip w_content flex items_center gap_2")
(text "{{ icon \"heart\" }}")
(span
(text "Follows you")))
(text "{%- endif %}")))
(div
("class" "flex gap_2")
(text "{% if is_following_you -%}")
(b
("class" "notification chip w_content flex items_center gap_2")
(icon (text "heart"))
(span (text "Follows you")))
(text "{%- endif %}")
(text "{% if user and close_friends_stack and (user.id in close_friends_stack.users) -%}")
(b
("class" "notification chip w_content flex items_center gap_2")
(icon (text "heart"))
(span (text "Friends")))
(text "{%- endif %}"))))
(div
("class" "card_nest flex flex_col")
(div

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "{{ profile.username }} (blocked) - {{ config.name }}"))
(text "{{ profile.username }} (blocked) {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "{{ profile.username }} (private profile) - {{ config.name }}"))
(text "{{ profile.username }} (private profile) {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Settings - {{ config.name }}"))
(text "Settings {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(article
("class" "flex flex_row gap_2 content_container")
@ -280,7 +280,7 @@
("required" "")
("minlength" "2")))
(button
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.save\" }}"))))))
(div
@ -335,7 +335,7 @@
(button
("onclick" "save_settings()")
("id" "save_button")
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.save\" }}"))))
(div
@ -442,7 +442,7 @@
("minlength" "6")
("autocomplete" "off")))
(button
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.save\" }}")))))))))
(div
@ -959,7 +959,7 @@
("class" "w_content"))
(button
("class" "small square big_icon")
(text "{{ icon \"check\" }}")))
(icon (text "check"))))
(span
("class" "fade")
(text "Images must be less than 8 MB large. Animated GIFs are
@ -987,7 +987,7 @@
("class" "w_content"))
(button
("class" "small square big_icon")
(text "{{ icon \"check\" }}")))
(icon (text "check"))))
(span
("class" "fade")
(text "Use an image of 1100x350px for the best results."))))
@ -1032,7 +1032,7 @@
(button
("onclick" "save_settings()")
("id" "save_button")
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.save\" }}"))))
(div
@ -1191,7 +1191,7 @@
(button
("onclick" "save_settings()")
("id" "save_button")
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.save\" }}"))))
(div
@ -1304,6 +1304,48 @@
(span
(text "{{ config.name }} ")
(str (text "developer:label.for_developers")))))
(div
("class" "card w_full lowered hidden flex flex_col gap_2")
("data-tab" "friends")
(h3 (text "Close friends stack"))
(p (text "Your close friends stack is a special stack where you can create posts for only your friends to see!"))
(text "{% if user.close_friends_stack -%}")
(div
("class" "flex gap_2")
(a
("href" "/stacks/{{ user.close_friends_stack }}/manage#/users")
("class" "button")
(icon (text "settings"))
(text "Manage users"))
(a
("href" "/communities/intents/post?stack={{ user.close_friends_stack }}")
("class" "button raised")
(icon (text "plus"))
(text "Post")))
(text "{% else %}")
(button
("onclick" "create_close_friends_stack()")
(icon (text "plus"))
(text "Create stack"))
(script
(text "globalThis.create_close_friends_stack = () => {
fetch(\"/api/v1/stacks/close_friends\", {
method: \"POST\",
})
.then((res) => res.json())
.then((res) => {
trigger(\"atto::toast\", [
res.ok ? \"success\" : \"error\",
res.message,
]);
if (res.ok) {
window.location.href = `/stacks/${res.payload}/manage#/users`;
}
});
}"))
(text "{%- endif %}"))
(script
("type" "application/json")
("id" "settings_json")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "{{ profile.username }} (warning) - {{ config.name }}"))
(text "{{ profile.username }} (warning) {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main
@ -26,7 +26,7 @@
("class" "card w_full secondary flex gap_2")
(button
("onclick" "trigger('warnings::accept', ['{{ profile.id }}', '{{ warning_hash }}'])")
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"dialog:action.continue\" }}")))
(a

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Add user to stack - {{ config.name }}"))
(text "Add user to stack {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav(selected=\"\") }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "{{ stack.name }} - {{ config.name }}"))
(text "{{ stack.name }} {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main
@ -19,7 +19,7 @@
(text "{{ stack.name }}")))
(div
("class" "flex gap_2")
(text "{% if stack.mode == 'Circle' -%}")
(text "{% if stack.mode == 'Circle' and (not stack.is_locked or user.id == stack.owner) -%}")
; post button for circle stacks
(a
("href" "/communities/intents/post?stack={{ stack.id }}")
@ -94,7 +94,7 @@
(text "{% set paged = user and user.settings.paged_timelines %}")
(script
(text "setTimeout(() => {
trigger(\"ui::io_data_load\", [\"/_swiss_army_timeline?stack_id={{ stack.id }}&page=\", Number.parseInt(\"{{ page }}\") - 1, \"{{ paged }}\" === \"true\"]);
trigger(\"ui::io_data_load\", [\"/_swiss_army_timeline?stack_id={{ stack.id }}&before=$1$&page=\", Number.parseInt(\"{{ page }}\") - 1, \"{{ paged }}\" === \"true\"]);
});"))
(text "{%- endif %}"))))

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "My stacks - {{ config.name }}"))
(text "My stacks {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main
@ -19,7 +19,7 @@
("class" "flex flex_col gap_1")
(label
("for" "name")
(text "{{ text \"communities:label.name\" }}"))
(str (text "communities:label.name")))
(input
("type" "text")
("name" "name")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Stack settings - {{ config.name }}"))
(text "Stack settings {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main
@ -56,6 +56,7 @@
("class" "card")
(select
("onchange" "save_mode(event)")
("disabled" "{{ stack.is_locked }}")
(option
("value" "Include")
("selected" "{% if stack.mode == 'Include' -%}true{% else %}false{%- endif %}")
@ -105,7 +106,7 @@
("class" "flex flex_col gap_1")
(label
("for" "name")
(text "{{ text \"communities:label.name\" }}"))
(str (text "communities:label.name")))
(input
("type" "text")
("name" "name")
@ -114,9 +115,10 @@
("required" "")
("minlength" "2")))
(button
(text "{{ icon \"check\" }}")
(icon (text "check"))
(span
(text "{{ text \"general:action.save\" }}"))))))
(text "{% if not stack.is_locked -%}")
(div
("class" "card_nest")
("ui_ident" "danger_zone")
@ -132,7 +134,8 @@
("onclick" "delete_stack()")
(text "{{ icon \"trash\" }}")
(span
(text "{{ text \"general:action.delete\" }}"))))))
(text "{{ text \"general:action.delete\" }}")))))
(text "{%- endif %}"))
(div
("class" "card w_full flex flex_col gap_2 hidden")
("data-tab" "users")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Latest posts - {{ config.name }}"))
(text "Latest posts {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main
("class" "flex flex_col gap_2")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Latest forum posts - {{ config.name }}"))
(text "Latest forum posts {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main
("class" "flex flex_col gap_2")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Latest questions - {{ config.name }}"))
(text "Latest questions {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main
("class" "flex flex_col gap_2")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Following - {{ config.name }}"))
(text "Following {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main
@ -14,7 +14,7 @@
(text "{% set paged = user and user.settings.paged_timelines %}")
(script
(text "setTimeout(() => {
trigger(\"ui::io_data_load\", [\"/_swiss_army_timeline?tl=FollowingPosts&page=\", Number.parseInt(\"{{ page }}\") - 1, \"{{ paged }}\" === \"true\"]);
trigger(\"ui::io_data_load\", [\"/_swiss_army_timeline?tl=FollowingPosts&before=$1$&page=\", Number.parseInt(\"{{ page }}\") - 1, \"{{ paged }}\" === \"true\"]);
});"))
(text "{% endblock %}")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Following (questions) - {{ config.name }}"))
(text "Following (questions) {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -46,7 +46,6 @@
(text "{% set paged = user and user.settings.paged_timelines %}")
(script
(text "setTimeout(() => {
trigger(\"ui::io_data_load\", [\"/_swiss_army_timeline?tl=MyCommunities&page=\", Number.parseInt(\"{{ page }}\") - 1, \"{{ paged }}\" === \"true\"]);
trigger(\"ui::io_data_load\", [\"/_swiss_army_timeline?tl=MyCommunities&before=$1$&page=\", Number.parseInt(\"{{ page }}\") - 1, \"{{ paged }}\" === \"true\"]);
});"))
(text "{% endblock %}")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "From my communities (questions) - {{ config.name }}"))
(text "From my communities (questions) {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Popular - {{ config.name }}"))
(text "Popular {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav(selected=\"popular\") }}")
(main
@ -14,7 +14,7 @@
(text "{% set paged = user and user.settings.paged_timelines %}")
(script
(text "setTimeout(() => {
trigger(\"ui::io_data_load\", [\"/_swiss_army_timeline?tl=PopularPosts&page=\", Number.parseInt(\"{{ page }}\") - 1, \"{{ paged }}\" === \"true\"]);
trigger(\"ui::io_data_load\", [\"/_swiss_army_timeline?tl=PopularPosts&before=$1$&page=\", Number.parseInt(\"{{ page }}\") - 1, \"{{ paged }}\" === \"true\"]);
});"))
(text "{% endblock %}")

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Popular (questions) - {{ config.name }}"))
(text "Popular (questions) {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main

View file

@ -1,6 +1,6 @@
(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "Search - {{ config.name }}"))
(text "Search {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main