This commit is contained in:
Your Name 2023-01-26 16:57:47 -05:00 committed by Henri Dickson
parent 5c1e5e80df
commit b9bd4355f7
5 changed files with 135 additions and 4 deletions

View file

@ -46,3 +46,13 @@
</nav>
</section>
</form>
{% if messages %}
<div class="main-section-wrapper" style="margin-bottom: 10px; text-align:center;">
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
</div>
{% endif %}

View file

@ -0,0 +1,60 @@
{% load static %}
{% load i18n %}
{% load l10n %}
{% load humanize %}
{% load admin_url %}
{% load mastodon %}
{% load oauth_token %}
{% load truncate %}
{% load highlight %}
{% load thumb %}
<div id="modal" _="on closeModal add .closing then wait for animationend then remove me">
<div class="modal-underlay" _="on click trigger closeModal"></div>
<div class="modal-content">
<div class="add-to-list-modal__head">
<span class="add-to-list-modal__title">{% trans '编辑标签' %} {{ item.title }}</span>
<span class="add-to-list-modal__close-button modal-close" _="on click trigger closeModal">
<span class="icon-cross">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
<polygon
points="20 2.61 17.39 0 10 7.39 2.61 0 0 2.61 7.39 10 0 17.39 2.61 20 10 12.61 17.39 20 20 17.39 12.61 10 20 2.61">
</polygon>
</svg>
</span>
</span>
</div>
<div class="add-to-list-modal__body">
<form action="{% url 'journal:user_tag_edit' %}?tag={{tag.title}}" method="post">
{% csrf_token %}
<input type="hidden" name="id" value="{{tag.id}}">
<div class="mark-modal__tag">
<div class="tag-input">
<input name="title" type="text" value="{{tag.title}}" required>
</div>
</div>
<div class="mark-modal__option">
<div class="mark-modal__visibility-radio">
<span>可见性:
<ul id="id_visibility">
<li><label for="id_visibility_0"><input type="radio" name="visibility" value="0" required="" id="id_visibility_0" {% if tag.visibility == 0 %}checked{% endif %}> 公开</label> </li>
<li><label for="id_visibility_2"><input type="radio" name="visibility" value="2" required="" id="id_visibility_2" {% if tag.visibility != 0 %}checked{% endif %}> 仅自己</label> </li>
</ul>
</span>
</div>
</div>
<div class="mark-modal__confirm-button">
<input type="submit" class="button float-right" value="保存">
</div>
<div class="mark-modal__option">
<div class="mark-modal__visibility-radio">
<span>
<label for="_delete" title="无法撤销"><input type="checkbox" name="delete" value="1" id="_delete"> 删除这个标签</label>
</span>
</div>
</div>
</form>
</div>

View file

@ -2,11 +2,17 @@
{% load i18n %}
{% block title%}
<title>{{ site_name }} - {{ user.mastodon_username }} - {{ tag_title }} {% trans '标签' %}</title>
<title>{{ site_name }} - {{ user.mastodon_username }} - {{ tag.title }} {% trans '标签' %}</title>
{% endblock %}
{% block head %}
{{ tag_title }}
{% if tag.visibility > 0 %}
<span class="icon-lock"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M17,8.48h-.73V6.27a6.27,6.27,0,1,0-12.53,0V8.48H3a.67.67,0,0,0-.67.67V19.33A.67.67,0,0,0,3,20H17a.67.67,0,0,0,.67-.67V9.15A.67.67,0,0,0,17,8.48ZM6.42,6.27h0a3.57,3.57,0,0,1,7.14,0h0V8.48H6.42Z"/></svg></span>
{% endif %}
{{ tag.title }}
{% if user == request.user %}
<a class="action-icon" hx-get="{% url 'journal:user_tag_edit' %}?tag={{tag.title}}" class="edit" hx-target="body" hx-swap="beforeend"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M19,20H5a1,1,0,0,0,0,2H19a1,1,0,0,0,0-2Z"/><path d="M5,18h.09l4.17-.38a2,2,0,0,0,1.21-.57l9-9a1.92,1.92,0,0,0-.07-2.71h0L16.66,2.6A2,2,0,0,0,14,2.53l-9,9a2,2,0,0,0-.57,1.21L4,16.91a1,1,0,0,0,.29.8A1,1,0,0,0,5,18ZM15.27,4,18,6.73,16,8.68,13.32,6Zm-8.9,8.91L12,7.32l2.7,2.7-5.6,5.6-3,.28Z"/></g></svg></a>
{% endif %}
<br>
<small>{{ user.mastodon_username }}的{% trans '标签' %}</small>
{% endblock %}

View file

@ -101,6 +101,11 @@ urlpatterns = [
user_tag_member_list,
name="user_tag_member_list",
),
path(
"tag/edit",
user_tag_edit,
name="user_tag_edit",
),
re_path(
r"^users/(?P<user_name>[A-Za-z0-9_\-.@]+)/collections/$",
user_collection_list,

View file

@ -9,7 +9,7 @@ from django.http import (
HttpResponseBadRequest,
HttpResponseNotFound,
)
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
from django.core.exceptions import BadRequest, ObjectDoesNotExist, PermissionDenied
from django.db.models import Count
from django.utils import timezone
from django.utils.dateparse import parse_datetime
@ -25,6 +25,8 @@ from mastodon.api import share_review, share_collection
from users.views import render_user_blocked, render_user_not_found
from users.models import User, Report, Preference
from common.utils import PageLinksGenerator
from user_messages import api as msg
_logger = logging.getLogger(__name__)
PAGE_SIZE = 10
@ -469,6 +471,7 @@ def _render_list(
request.user.is_blocked_by(user) or request.user.is_blocking(user)
):
return render_user_blocked(request)
tag = None
if type == "mark":
queryset = user.shelf_manager.get_members(shelf_type, item_category)
elif type == "tagmember":
@ -493,7 +496,7 @@ def _render_list(
return render(
request,
f"user_{type}_list.html",
{"user": user, "members": members, "tag_title": tag_title},
{"user": user, "members": members, "tag": tag},
)
@ -509,6 +512,53 @@ def user_tag_member_list(request, user_name, tag_title):
return _render_list(request, user_name, "tagmember", tag_title=tag_title)
@login_required
def user_tag_edit(request):
if request.method == "GET":
tag_title = Tag.cleanup_title(request.GET.get("tag", ""))
if not tag_title:
return HttpResponseNotFound()
tag = Tag.objects.filter(owner=request.user, title=tag_title).first()
if not tag:
return HttpResponseNotFound()
return render(request, "tag_edit.html", {"tag": tag})
elif request.method == "POST":
tag_title = Tag.cleanup_title(request.POST.get("title", ""))
tag_id = request.POST.get("id")
tag = (
Tag.objects.filter(owner=request.user, id=tag_id).first()
if tag_id
else None
)
if not tag or not tag_title:
msg.error(request.user, _("无效标签"))
return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
if request.POST.get("delete"):
tag.delete()
msg.info(request.user, _("标签已删除"))
return redirect(
reverse("journal:user_tag_list", args=[request.user.mastodon_username])
)
elif (
tag_title != tag.title
and Tag.objects.filter(owner=request.user, title=tag_title).exists()
):
msg.error(request.user, _("标签已存在"))
return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
tag.title = tag_title
tag.visibility = Tag.cleanup_title(request.POST.get("visibility"))
tag.visibility = 0 if tag.visibility == 0 else 2
tag.save()
msg.info(request.user, _("标签已修改"))
return redirect(
reverse(
"journal:user_tag_member_list",
args=[request.user.mastodon_username, tag.title],
)
)
return HttpResponseBadRequest()
@login_required
def user_review_list(request, user_name, item_category):
return _render_list(request, user_name, "review", item_category=item_category)