242 lines
8.7 KiB
HTML
242 lines
8.7 KiB
HTML
{% load static %}
|
|
{% load i18n %}
|
|
{% load admin_url %}
|
|
{% load mastodon %}
|
|
{% load oauth_token %}
|
|
{% load truncate %}
|
|
{% load thumb %}
|
|
{% load collection %}
|
|
{% load bleach_tags %}
|
|
<aside class="grid__aside sidebar">
|
|
{% if request.user.unread_announcements %}
|
|
<section class="announcement">
|
|
<article>
|
|
<h5>
|
|
未读公告
|
|
<small> | <a href="{% url 'management:list' %}">全部</a> </small>
|
|
</h5>
|
|
{% for ann in request.user.unread_announcements %}
|
|
<details open>
|
|
<summary>
|
|
{{ ann.title }}
|
|
<small>(<a href="{% url 'management:retrieve' ann.pk %}">{{ ann.created_time|date }}</a>)</small>
|
|
</summary>
|
|
<div class="tldr" _="on click toggle .tldr on me">{{ ann.get_html_content | safe }}</div>
|
|
</details>
|
|
{% endfor %}
|
|
<form action="{% url 'users:mark_announcements_read' %}" method="post">
|
|
{% csrf_token %}
|
|
<input type="submit" class="secondary outline" value="{% trans '全部标为已读' %}">
|
|
</form>
|
|
</article>
|
|
</section>
|
|
{% endif %}
|
|
{% if show_profile %}
|
|
<section class="profile">
|
|
<article>
|
|
<details class="auto-collapse" open>
|
|
<summary>
|
|
<div>
|
|
<div class="avatar">
|
|
<a href="{{ identity.url }}" onclick="window.location = this.href;">
|
|
{% comment %} onclick to workaround webkit issue with <a /> in <summary /> {% endcomment %}
|
|
<img src="{{ identity.avatar }}" alt="">
|
|
</a>
|
|
</div>
|
|
<div>
|
|
<hgroup>
|
|
<h6 class="nickname">{{ identity.display_name }}</h6>
|
|
<div>
|
|
<span class="handler">{{ identity.full_handle }}</span>
|
|
</div>
|
|
</hgroup>
|
|
</div>
|
|
</div>
|
|
</summary>
|
|
<span class="action">
|
|
{% if identity.user == request.user %}
|
|
{% if identity.locked %}
|
|
<span>
|
|
<a title="你已开启关注审核">
|
|
<i class="fa-solid fa-user-shield"></i>
|
|
</a>
|
|
</span>
|
|
{% endif %}
|
|
{% if identity.user.mastodon_account %}
|
|
<span>
|
|
<a href="{{ identity.user.mastodon_account.url }}"
|
|
target="_blank"
|
|
rel="noopener"
|
|
title="@{{ identity.user.mastodon_acct }}">
|
|
<i class="fa-brands fa-mastodon"></i>
|
|
</a>
|
|
</span>
|
|
{% endif %}
|
|
{% elif request.user.is_authenticated %}
|
|
{% include 'users/profile_actions.html' %}
|
|
{% endif %}
|
|
</span>
|
|
<p>{{ identity.summary|bleach:"a,p,span,br" }}</p>
|
|
</details>
|
|
</article>
|
|
</section>
|
|
{% endif %}
|
|
{% if show_progress %}
|
|
<section>
|
|
<article>
|
|
<details {% if identity.featured_collections.all %}open{% endif %}>
|
|
<summary>{% trans '当前目标' %}</summary>
|
|
{% for featured_collection in identity.featured_collections.all %}
|
|
{% user_visibility_of featured_collection as visible %}
|
|
{% if visible %}
|
|
{% user_stats_of collection=featured_collection identity=identity as stats %}
|
|
<div>
|
|
<a href="{{ featured_collection.collection.url }}">{{ featured_collection.collection.title }}</a> <small>{{ stats.complete }} / {{ stats.total }}</small>
|
|
<br>
|
|
<progress value="{{ stats.percentage }}" max="100" />
|
|
</div>
|
|
{% endif %}
|
|
{% empty %}
|
|
{% if request.user == identity.user %}
|
|
<div class="empty">将自己或他人的收藏单设为目标,这里就会显示进度</div>
|
|
{% else %}
|
|
<div class="empty">暂未设置目标</div>
|
|
{% endif %}
|
|
{% endfor %}
|
|
</details>
|
|
</article>
|
|
</section>
|
|
{% endif %}
|
|
{% if recent_podcast_episodes %}
|
|
<section>
|
|
<article>
|
|
<details class="auto-collapse" open>
|
|
<summary>{% trans '在听播客的近期单集' %}</summary>
|
|
<div class="shelf">
|
|
<ul class="cards">
|
|
{% for item in recent_podcast_episodes %}
|
|
<li class="card">
|
|
<a class="episode"
|
|
data-uuid="{{ item.uuid }}"
|
|
data-media="{{ item.media_url }}"
|
|
data-cover="{{ item.cover_url|default:item.program.cover.url }}"
|
|
data-title="{{ item.title }}"
|
|
data-album="{{ item.program.title }}"
|
|
data-hosts="{{ item.program.hosts|join:' / ' }}"
|
|
{% if request.user.is_authenticated %} data-comment-href="{% url 'journal:comment' item.uuid %}" {% endif %}
|
|
data-position="0"
|
|
href="{{ item.url }}"
|
|
title="{{ item.title }}">
|
|
<img src="{{ item.cover_image_url | default:item.cover.url }}"
|
|
alt="{{ item.title }}"
|
|
loading="lazy">
|
|
<div class="card-title">
|
|
<i class="fa-solid fa-circle-play"></i> {{ item.title }}
|
|
</div>
|
|
</a>
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
</div>
|
|
</details>
|
|
</article>
|
|
</section>
|
|
{% endif %}
|
|
{% if books_in_progress %}
|
|
<section>
|
|
<article>
|
|
<details class="auto-collapse" open>
|
|
<summary>{% trans '在读的书' %}</summary>
|
|
<div class="shelf">
|
|
<ul class="cards">
|
|
{% for item in books_in_progress %}
|
|
<li class="card">
|
|
<a href="{{ item.url }}" title="{{ item.title }}">
|
|
<img src="{{ item.cover|thumb:'normal' }}"
|
|
alt="{{ item.title }}"
|
|
loading="lazy">
|
|
<div class="card-title">{{ item.title }}</div>
|
|
</a>
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
</div>
|
|
</details>
|
|
</article>
|
|
</section>
|
|
{% endif %}
|
|
{% if tvshows_in_progress %}
|
|
<section>
|
|
<article>
|
|
<details class="auto-collapse" open>
|
|
<summary>{% trans '在看的剧集' %}</summary>
|
|
<div class="shelf">
|
|
<ul class="cards">
|
|
{% for item in tvshows_in_progress %}
|
|
<li class="card">
|
|
<a href="{{ item.url }}" title="{{ item.title }}">
|
|
<img src="{{ item.cover|thumb:'normal' }}"
|
|
alt="{{ item.title }}"
|
|
loading="lazy">
|
|
<div class="card-title">{{ item.title }}</div>
|
|
</a>
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
</div>
|
|
</details>
|
|
</article>
|
|
</section>
|
|
{% endif %}
|
|
{% if top_tags %}
|
|
<section>
|
|
<article>
|
|
<details {% if top_tags %}class="auto-collapse" open{% endif %}>
|
|
<summary>{% trans '常用标签' %}</summary>
|
|
<div class="tag-list">
|
|
{% for t in top_tags %}
|
|
<span>
|
|
<a href="{% url 'journal:user_tag_member_list' identity.handler t %}">{{ t }}</a>
|
|
</span>
|
|
{% empty %}
|
|
<div class="empty">暂无可见标签</div>
|
|
{% endfor %}
|
|
</div>
|
|
<small>
|
|
{% if top_tags %}
|
|
<a href="{% url 'journal:user_tag_list' identity.handler %}">...{% trans '全部' %}</a>
|
|
{% endif %}
|
|
</small>
|
|
</details>
|
|
</article>
|
|
</section>
|
|
{% endif %}
|
|
{% if sidebar_template %}
|
|
{% include sidebar_template %}
|
|
{% endif %}
|
|
{% if request.user.is_superuser and identity.local and request.user.identity != identity and request.GET.sudo %}
|
|
<section class="hijacker">
|
|
<form action="{% url 'hijack:acquire' %}" method="post">
|
|
{% csrf_token %}
|
|
<input type="hidden" name="user_pk" value="{{ identity.user.pk }}">
|
|
<button type="submit">View as them</button>
|
|
<button _="on click hide .hijacker then halt default">Hide</button>
|
|
<input type="hidden" name="next" value="{{ request.path }}">
|
|
</form>
|
|
</section>
|
|
{% endif %}
|
|
</aside>
|
|
<script>
|
|
$(function () {
|
|
function _sidebar_auto_collapse(mm){
|
|
if (mm.matches) {
|
|
$('.auto-collapse').removeAttr('open')
|
|
} else {
|
|
$('.auto-collapse').attr('open', '')
|
|
}
|
|
}
|
|
var mm = window.matchMedia("(max-width: 768px)")
|
|
mm.addListener(_sidebar_auto_collapse);
|
|
_sidebar_auto_collapse(mm);
|
|
});
|
|
</script>
|