(text "{% extends \"root.html\" %} {% block head %}")
(title
(text "{{ profile.username }} (private profile) - {{ config.name }}"))
(text "{% endblock %} {% block body %} {{ macros::nav() }}")
(main
("class" "flex flex-col gap-2")
(div
("class" "card-nest")
(div
("class" "card small flex items-center justify-between gap-2")
(div
("class" "flex items-center gap-2")
(text "{{ components::avatar(username=profile.username, size=\"24px\") }}")
(span
(text "{{ profile.username }}")))
(b
("class" "notification chip")
(text "{{ text \"auth:label.private_profile\" }}")))
(div
("class" "card flex flex-col gap-2")
(span
(text "{{ text \"auth:label.private_profile_message\" }}"))
(div
("class" "card w-full secondary flex gap-2")
(text "{% if user -%} {% if not is_following -%}")
(button
("onclick" "toggle_follow_user(event)")
("class" "{% if follow_requested -%} hidden{%- endif %}")
("atto_tag" "user.follow_request")
(text "{{ icon \"user-plus\" }}")
(span
(text "{{ text \"auth:action.request_to_follow\" }}")))
(button
("onclick" "cancel_follow_user(event)")
("class" "lowered red{% if not follow_requested -%} hidden{%- endif %}")
("atto_tag" "user.cancel_request")
(text "{{ icon \"user-minus\" }}")
(span
(text "{{ text \"auth:action.cancel_follow_request\" }}")))
(text "{% else %}")
(button
("onclick" "toggle_follow_user(event)")
("class" "lowered red")
("atto_tag" "user.unfollow")
(text "{{ icon \"user-minus\" }}")
(span
(text "{{ text \"auth:action.unfollow\" }}")))
(text "{%- endif %} {% if not is_blocking -%}")
(div
("class" "dropdown")
(button
("onclick" "trigger('atto::hooks::dropdown', [event])")
("exclude" "dropdown")
("class" "lowered red")
(icon_class (text "chevron-down") (text "dropdown-arrow"))
(str (text "auth:action.block")))
(div
("class" "inner left")
(button
("onclick" "toggle_block_user()")
(icon (text "shield"))
(str (text "auth:action.block")))
(button
("onclick" "ip_block_user()")
(icon (text "wifi"))
(str (text "auth:action.ip_block")))))
(text "{% else %}")
(button
("onclick" "toggle_block_user()")
("class" "lowered red")
(text "{{ icon \"shield-off\" }}")
(span
(text "{{ text \"auth:action.unblock\" }}")))
(text "{%- endif %}")
(script
(text "globalThis.toggle_follow_user = async (e) => {
await trigger(\"atto::debounce\", [\"users::follow\"]);
fetch(\"/api/v1/auth/user/{{ profile.id }}/follow\", {
method: \"POST\",
})
.then((res) => res.json())
.then((res) => {
trigger(\"atto::toast\", [
res.ok ? \"success\" : \"error\",
res.message,
]);
if (
e.target.getAttribute(\"atto_tag\") ===
\"user.follow_request\"
) {
document
.querySelector(
'[atto_tag=\"user.follow_request\"]',
)
.classList.add(\"hidden\");
document
.querySelector(
'[atto_tag=\"user.cancel_request\"]',
)
.classList.remove(\"hidden\");
} else {
window.location.reload();
}
});
};
globalThis.cancel_follow_user = async (e) => {
await trigger(\"atto::debounce\", [\"users::follow\"]);
if (
!(await trigger(\"atto::confirm\", [
\"Are you sure you would like to do this?\",
]))
) {
return;
}
fetch(
\"/api/v1/auth/user/{{ profile.id }}/follow/cancel\",
{
method: \"POST\",
},
)
.then((res) => res.json())
.then((res) => {
trigger(\"atto::toast\", [
res.ok ? \"success\" : \"error\",
res.message,
]);
document
.querySelector(
'[atto_tag=\"user.cancel_request\"]',
)
.classList.add(\"hidden\");
document
.querySelector(
'[atto_tag=\"user.follow_request\"]',
)
.classList.remove(\"hidden\");
});
};
globalThis.toggle_block_user = async () => {
if (
!(await trigger(\"atto::confirm\", [
\"Are you sure you would like to do this?\",
]))
) {
return;
}
fetch(\"/api/v1/auth/user/{{ profile.id }}/block\", {
method: \"POST\",
})
.then((res) => res.json())
.then((res) => {
trigger(\"atto::toast\", [
res.ok ? \"success\" : \"error\",
res.message,
]);
});
};
globalThis.ip_block_user = async () => {
if (
!(await trigger(\"atto::confirm\", [
\"Are you sure you would like to do this?\",
]))
) {
return;
}
fetch(
\"/api/v1/auth/user/{{ profile.id }}/block_ip\",
{
method: \"POST\",
},
)
.then((res) => res.json())
.then((res) => {
trigger(\"atto::toast\", [
res.ok ? \"success\" : \"error\",
res.message,
]);
});
};"))
(text "{%- endif %}")
(a
("href" "/")
("class" "button red lowered")
(text "{{ icon \"x\" }}")
(span
(text "{{ text \"general:action.back\" }}")))))))
(text "{% endblock %}")