edit tag
This commit is contained in:
parent
5c1e5e80df
commit
b9bd4355f7
5 changed files with 135 additions and 4 deletions
|
@ -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 %}
|
||||
|
|
60
journal/templates/tag_edit.html
Normal file
60
journal/templates/tag_edit.html
Normal 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>
|
|
@ -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 %}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue