lib.itmens/users/templates/users/account.html
2024-12-26 13:18:41 -05:00

341 lines
17 KiB
HTML

{% load static %}
{% load i18n %}
{% load mastodon %}
{% load thumb %}
<!DOCTYPE html>
<html lang="zh" class="classic-page">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ site_name }} - {% trans "Account Information" %}</title>
{% include "common_libs.html" %}
</head>
<body>
{% include "_header.html" %}
<main>
<div class="grid__main">
<article>
<details>
<summary>{% trans "Display name, avatar and other information" %}</summary>
<form action="{% url 'users:profile' %}?next={{ request.path }}"
method="post"
{% if request.user.mastodon and not request.user.preference.mastodon_skip_userinfo %}onsubmit="return confirm('{% trans "Updating profile information here will turn off automatic sync of display name, bio and avatar from your Mastodon instance. Sure to continue?" %}')"{% endif %}
enctype="multipart/form-data">
<label>
{% trans "Username" %}
<input value="{{ request.user.username }}"
aria-invalid="false"
readonly
disabled />
</label>
{% include "_field.html" with field=profile_form.name %}
{% include "_field.html" with field=profile_form.summary %}
{% include "_field.html" with field=profile_form.icon %}
{% include "_field.html" with field=profile_form.discoverable %}
{% include "_field.html" with field=profile_form.manually_approves_followers %}
{% csrf_token %}
<input type="submit" value="{% trans 'Save' %}" id="save">
</form>
</details>
</article>
{% if allow_any_site %}
<article>
<details>
<summary>{% trans 'Email' %}</summary>
<form action="{% url 'users:register' %}?next={{ request.path }}"
method="post">
<input value="{{ request.user.username }}" type="hidden" name="username" />
<fieldset>
<label>
{% trans "Email address" %}
<input type="email"
name="email"
_="on input remove [@disabled] from #save_email then remove [@aria-invalid] end"
{% if request.user.email_account %}value="{{ request.user.email_account.handle }}" aria-invalid="false"{% endif %}
placeholder="email"
autocomplete="email" />
<small>
{% if request.session.pending_email %}
{% blocktrans with pending_email=request.session.pending_email %}Please click the confirmation link in the email sent to {{ pending_email }}; if you haven't received it for more than a few minutes, please input and save again.{% endblocktrans %}
{% elif not request.user.email_account %}
{% trans "Email is recommended as a backup login method, if you log in via a Fediverse instance" %}
{% endif %}
</small>
</label>
</fieldset>
{% csrf_token %}
<input type="submit" value="{% trans 'Save' %}" disabled id="save_email">
</form>
</details>
</article>
<article>
<details>
<summary>{% trans "Fediverse (Mastodon)" %}</summary>
<form action="{% url 'mastodon:reconnect' %}" method="post">
{% csrf_token %}
<fieldset>
{% if request.user.mastodon %}
<label>
<i class="fa-brands fa-mastodon"></i> {% trans "Verified Identity" %}
<input type="input"
{% if request.user.mastodon %}aria-invalid="false"{% endif %}
value="{{ request.user.mastodon.handle | default:'-' }}"
readonly>
<small>
{% if request.user.mastodon.last_refresh %}
{% trans "Last updated" %} {{ request.user.mastodon.last_refresh }}
{% endif %}
</small>
</label>
{% else %}
<p>
{% blocktrans %}If you have not yet registered with any Federated instance, you may <a href="https://joinmastodon.org/zh/servers" target="_blank">choose an instance</a> and register.{% endblocktrans %}
</p>
{% endif %}
<label>
{% if request.user.mastodon %}
{% trans "To associate with another federated identity, please enter the domain name of the instance where the new identity is located." %}
{% else %}
{% trans "If you have registered with a Federated instance, please enter the instance domain name." %}
{% endif %}
<input type="input"
name="domain"
value=""
placeholder="e.g. mastodon.online"
_="on input remove [@disabled] from #bind end">
</label>
<input type="submit"
value="{% trans 'Go to target instance and authorize with the identity' %}"
disabled
id="bind" />
<small>
{% if request.user.mastodon %}
{% blocktrans %}After replacing the association, you may use the new Fediverse identity to log in and control data visibility. Existing data such as tags, comments, and collections will not be affected.{% endblocktrans %}
{% else %}
{% trans "Once associated with Fediverse identity, you can discover more users and use the full features of this site." %}
{% endif %}
</small>
</fieldset>
</form>
{% if request.user.mastodon %}
<form action="{% url 'mastodon:disconnect' %}"
method="post"
onsubmit="return confirm('{% trans "Once disconnected, you will no longer be able login with this identity. Are you sure to continue?" %}')">
{% csrf_token %}
<input type="submit"
value="{% trans 'Disconnect with this identity' %}"
class="secondary" />
</form>
{% endif %}
</details>
</article>
{% if enable_threads %}
<article>
<details>
<summary>{% trans "Threads.net" %}</summary>
<form action="{% url 'mastodon:threads_reconnect' %}" method="post">
{% csrf_token %}
<fieldset>
{% if request.user.threads %}
<label>
<i class="fa-brands fa-threads"></i> {% trans "Verified threads.net account" %}
<input type="input"
aria-invalid="false"
value="{{ request.user.threads.handle }}"
readonly>
<small>
{% if request.user.threads.last_refresh %}
{% trans "Last updated" %} {{ request.user.threads.last_refresh }}
{% endif %}
</small>
</label>
{% endif %}
<input type="submit"
value="{% if request.user.threads %} {% trans 'Link with a different threads.net account' %} {% else %} {% trans "Link with a threads.net account" %} {% endif %} " />
</fieldset>
</form>
{% if request.user.threads %}
<form action="{% url 'mastodon:threads_disconnect' %}"
method="post"
onsubmit="return confirm('{% trans "Once disconnected, you will no longer be able login with this identity. Are you sure to continue?" %}')">
{% csrf_token %}
<input type="submit"
value="{% trans 'Disconnect with Threads' %}"
class="secondary" />
</form>
{% endif %}
</details>
</article>
{% endif %}
{% if enable_bluesky %}
<article>
<details>
<summary>{% trans "Bluesky (ATProto)" %}</summary>
<form action="{% url 'mastodon:bluesky_reconnect' %}" method="post">
{% csrf_token %}
<fieldset>
{% if request.user.bluesky %}
<label>
<i class="fa-brands fa-bluesky"></i> {% trans "Verified ATProto identity" %}
<input type="input"
aria-invalid="false"
value="@{{ request.user.bluesky.handle }} {{ request.user.bluesky.uid }}"
readonly>
<small>
{% if request.user.bluesky.last_refresh %}
{% trans "Last updated" %} {{ request.user.bluesky.last_refresh }}
{% endif %}
</small>
</label>
{% endif %}
<input required
name="username"
autofocus
placeholder="{% trans 'Bluesky Login ID' %}"
autocorrect="off"
autocapitalize="off"
autocomplete="off"
spellcheck="false" />
<input required
type="password"
name="password"
placeholder="{% trans 'Bluesky app password' %}"
autocorrect="off"
autocapitalize="off"
autocomplete="off"
spellcheck="false" />
<input type="submit"
value="{% if request.user.bluesky %} {% trans 'Link with a different ATProto identity' %} {% else %} {% trans "Link with an ATProto identity" %} {% endif %} " />
<small>{% blocktrans %}App password can be created on <a href="https://bsky.app/settings/app-passwords" target="_blank">bsky.app</a>.{% endblocktrans %}</small>
</fieldset>
</form>
{% if request.user.bluesky %}
<form action="{% url 'mastodon:bluesky_disconnect' %}"
method="post"
onsubmit="return confirm('{% trans "Once disconnected, you will no longer be able login with this identity. Are you sure to continue?" %}')">
{% csrf_token %}
<input type="submit"
value="{% trans 'Disconnect with ATProto identity' %}"
class="secondary" />
</form>
{% endif %}
</details>
</article>
{% endif %}
{% endif %}
{% if request.user.social_accounts.all %}
<article>
<details>
<summary>{% trans 'Sync and import social account' %}</summary>
<form action="{% url 'users:sync_mastodon_preference' %}"
method="post"
enctype="multipart/form-data">
{% csrf_token %}
<fieldset>
<label>
<input type="checkbox"
name="mastodon_sync_userinfo"
{% if not request.user.preference.mastodon_skip_userinfo %}checked{% endif %}>
{% trans 'Sync display name, bio and avatar' %}
</label>
</fieldset>
<fieldset>
<label>
<input type="checkbox"
name="mastodon_sync_relationship"
{% if not request.user.preference.mastodon_skip_relationship %}checked{% endif %}>
{% trans 'Sync follow, mute and block' %}
</label>
</fieldset>
<input type="submit" value="{% trans 'Save sync settings' %}" />
<small>
{% trans "New follow, mute and blocks in the associated identity may be automatically imported; removal has to be done manually." %}
</small>
</form>
<form action="{% url 'users:sync_mastodon' %}"
method="post"
enctype="multipart/form-data">
{% csrf_token %}
<small>{% trans "Click button below to start sync now." %}</small>
<input type="submit" value="{% trans 'Sync now' %}" />
<small>
{% if request.user.mastodon.last_refresh %}
{% trans "Last updated" %} {{ request.user.mastodon.last_refresh }}
{% endif %}
</small>
</form>
</details>
</article>
{% endif %}
<article>
<details>
<summary>{% trans 'Users you are following' %}</summary>
{% include 'users/relationship_list.html' with id="follow" list=request.user.identity.following_identities.all %}
</details>
</article>
<article>
<details>
<summary>{% trans 'Users who follow you' %}</summary>
{% include 'users/relationship_list.html' with id="follower" list=request.user.identity.follower_identities.all %}
</details>
</article>
<article>
<details>
<summary>{% trans 'Users who request to follow you' %}</summary>
{% include 'users/relationship_list.html' with id="follow_request" list=request.user.identity.requested_follower_identities.all %}
</details>
</article>
<article>
<details>
<summary>{% trans 'Users you are muting' %}</summary>
{% include 'users/relationship_list.html' with id="mute" list=request.user.identity.muting_identities.all %}
</details>
</article>
<article>
<details>
<summary>{% trans 'Users you are blocking' %}</summary>
{% include 'users/relationship_list.html' with id="block" list=request.user.identity.blocking_identities.all %}
</details>
</article>
{% if allow_any_site %}
<article>
<details>
<summary>{% trans 'Delete Account' %}</summary>
<form action="{% url 'users:clear_data' %}"
method="post"
onsubmit="return confirm('{% trans "Once deleted, account data cannot be recovered. Sure to proceed?" %}');">
{% csrf_token %}
<div>
{% blocktrans %}Enter full <code>username@instance.social</code> or <code>email@domain.com</code> to confirm deletion.{% endblocktrans %}
<input type="email"
name="verification"
_="on input remove [@disabled] from #delete end"
value=""
autocomplete="off"
required
aria-invalid="true"
aria-describedby="invalid-helper"
placeholder="Gargron@mastodon.social">
<small id="invalid-helper">{% trans "Once deleted, account data cannot be recovered." %}</small>
{% if import_status.douban_pending %}
<input type="submit"
value="{% trans "Importing in progress, can't delete now." %}"
disabled />
{% else %}
<input type="submit"
value="{% trans 'Permanently Delete' %}"
class="contrast"
disabled
id="delete" />
{% endif %}
</div>
</form>
</details>
</article>
{% endif %}
</div>
{% include "_sidebar.html" with show_profile=1 identity=request.user.identity %}
</main>
{% include "_footer.html" %}
</body>
</html>