add new edit page for mark history. remove unused scss
This commit is contained in:
parent
c53d578430
commit
8f053238c2
6 changed files with 169 additions and 72 deletions
|
@ -169,17 +169,19 @@
|
|||
{% endif %}
|
||||
</h5>
|
||||
{% if mark.logs %}
|
||||
<div>
|
||||
<ul class="log-list">
|
||||
{% for log in mark.logs %}
|
||||
<span class="action">
|
||||
<span>
|
||||
<a target="_blank" rel="noopener"></a>
|
||||
<li>
|
||||
<span class="action">
|
||||
<span>
|
||||
<a target="_blank" rel="noopener"></a>
|
||||
</span>
|
||||
<span class="timestamp">{{ log.timestamp|date }}</span>
|
||||
</span>
|
||||
<span class="timestamp">{{ log.timestamp|date }}</span>
|
||||
</span>
|
||||
<p>• {{ log.action_label }}</p>
|
||||
<p>{{ log.action_label }}</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</ul>
|
||||
{% else %}
|
||||
<span class="empty">暂无</span>
|
||||
{% endif %}
|
||||
|
|
|
@ -11,32 +11,29 @@
|
|||
}
|
||||
}
|
||||
|
||||
#mark-history-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.log-info {
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
|
||||
#log-delete-all {
|
||||
margin-left: 2rem;
|
||||
margin-bottom: 1rem;
|
||||
align-items: center;
|
||||
display: inline;
|
||||
padding: calc(var(--pico-spacing)/6);
|
||||
border-radius: calc(var(--pico-spacing)/4);
|
||||
border-width: 2px;
|
||||
font-size: 80%;
|
||||
font-weight: lighter;
|
||||
word-break: keep-all;
|
||||
opacity: 1;
|
||||
font-weight: 400;
|
||||
text-decoration: none;
|
||||
white-space: nowrap;
|
||||
ul.log-list {
|
||||
padding-left: 20px;
|
||||
|
||||
li {
|
||||
list-style-type: disc;
|
||||
}
|
||||
}
|
||||
|
||||
footer.log-command {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
// flex-direction: row-reverse;
|
||||
.action {
|
||||
display: flex; /* Align items within each span */
|
||||
align-items: center; /* Center items vertically */
|
||||
margin-right: 10px; /* Add some spacing between items */
|
||||
}
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.mark-line {
|
||||
|
||||
|
|
|
@ -18,45 +18,34 @@
|
|||
{% include "_header.html" %}
|
||||
<main>
|
||||
<div>
|
||||
<div id="mark-history-header">
|
||||
<h3>标记历史</h3>
|
||||
{% if mark.logs %}
|
||||
<form id="mark_delete"
|
||||
action="{% url 'journal:mark' mark.item.uuid %}"
|
||||
method="post">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="delete" value="1">
|
||||
<input type="hidden" name="silence" value="True">
|
||||
<a>
|
||||
<button class="secondary"
|
||||
id="log-delete-all"
|
||||
onclick="return confirm('确认清空标记历史?当前标记也会一并删除')">清空标记历史</button>
|
||||
</a>
|
||||
</form>
|
||||
{% endif %}
|
||||
</div>
|
||||
<h3>标记历史</h3>
|
||||
{% if mark.logs %}
|
||||
<article>
|
||||
<div>
|
||||
<ul class="log-list">
|
||||
{% for log in mark.logs %}
|
||||
<div>
|
||||
<form id="mark_log_delete_{{ log.id }}"
|
||||
action="{% url 'journal:mark_log' item.uuid log.id %}"
|
||||
<li>
|
||||
<span class="log-info">{{ log.timestamp|date }}</span>
|
||||
<span class="log-info">{{ log.action_label }}</span>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% if mark.logs %}
|
||||
<footer class="log-command">
|
||||
<span class="action">
|
||||
<a href="{% url 'journal:mark_history_edit' item.uuid %}">{% trans '编辑' %}</a>
|
||||
</span>
|
||||
<span class="action">
|
||||
<form id="mark_delete"
|
||||
action="{% url 'journal:mark' mark.item.uuid %}"
|
||||
method="post">
|
||||
{% csrf_token %}
|
||||
<span class="log-info">•</span>
|
||||
<span class="timestamp log-info">{{ log.timestamp|date }}</span>
|
||||
<span class="log-info">{{ log.action_label }}</span>
|
||||
<input type="hidden" name="delete" value="1">
|
||||
<input type="hidden" name="log_id" id="{{ log.id }}">
|
||||
<a href="javascript:$('#mark_log_delete_{{ log.id }}').submit()"
|
||||
class="delete">
|
||||
<i class="fa-solid fa-square-xmark"></i>
|
||||
</a>
|
||||
<input type="hidden" name="silence" value="True">
|
||||
<a href="#" onclick="deleteLog(event)">清空标记历史</a>
|
||||
</form>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</span>
|
||||
</footer>
|
||||
{% endif %}
|
||||
</article>
|
||||
{% endif %}
|
||||
<br>
|
||||
|
@ -71,6 +60,17 @@
|
|||
$(this).toggleClass('revealed');
|
||||
})
|
||||
</script>
|
||||
<script>
|
||||
function deleteLog(event) {
|
||||
event.preventDefault(); // Prevent the default link behavior
|
||||
|
||||
const confirmation = confirm('确认清空标记历史?当前标记也会一并删除');
|
||||
if (confirmation) {
|
||||
const form = document.getElementById('mark_delete');
|
||||
form.submit(); // Submit the form
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{% include "_footer.html" %}
|
||||
</body>
|
||||
</html>
|
||||
|
|
82
journal/templates/mark_history_edit.html
Normal file
82
journal/templates/mark_history_edit.html
Normal file
|
@ -0,0 +1,82 @@
|
|||
{% load static %}
|
||||
{% load i18n %}
|
||||
{% load admin_url %}
|
||||
{% load mastodon %}
|
||||
{% load oauth_token %}
|
||||
{% load truncate %}
|
||||
{% load thumb %}
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" class="content-page">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ site_name }} - {{ item.title }} - {% trans '标记历史' %}</title>
|
||||
{% include "common_libs.html" with jquery=0 v2=1 %}
|
||||
<style type="text/css">#id_visibility, #id_visibility li {padding-left:0; margin-bottom:0; display: inline-block !important;}</style>
|
||||
</head>
|
||||
<body>
|
||||
{% include "_header.html" %}
|
||||
<main>
|
||||
<div>
|
||||
<h3>标记历史</h3>
|
||||
{% if mark.logs %}
|
||||
<article>
|
||||
<ul class="log-list">
|
||||
{% for log in mark.logs %}
|
||||
<li>
|
||||
<form id="mark_log_delete_{{ log.id }}"
|
||||
action="{% url 'journal:mark_log' item.uuid log.id %}"
|
||||
method="post">
|
||||
{% csrf_token %}
|
||||
<span class="log-info">{{ log.timestamp|date }}</span>
|
||||
<span class="log-info">{{ log.action_label }}</span>
|
||||
<input type="hidden" name="delete" value="1">
|
||||
<input type="hidden" name="log_id" id="{{ log.id }}">
|
||||
<a href="javascript:$('#mark_log_delete_{{ log.id }}').submit()"
|
||||
class="delete">
|
||||
<i class="fa-solid fa-square-xmark"></i>
|
||||
</a>
|
||||
</form>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<footer class="log-command">
|
||||
<span class="action">
|
||||
<form id="mark_delete"
|
||||
action="{% url 'journal:mark' mark.item.uuid %}"
|
||||
method="post">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="delete" value="1">
|
||||
<input type="hidden" name="silence" value="True">
|
||||
<a href="#" onclick="deleteLog(event)">清空标记历史</a>
|
||||
</form>
|
||||
</span>
|
||||
</footer>
|
||||
</article>
|
||||
{% endif %}
|
||||
<br>
|
||||
<a href="{% url 'catalog:retrieve' item.url_path item.uuid %}">返回条目</a>
|
||||
</div>
|
||||
<aside>
|
||||
{% include "_sidebar_item.html" with item=item %}
|
||||
</aside>
|
||||
</main>
|
||||
<script>
|
||||
$(".spoiler").on('click', function(){
|
||||
$(this).toggleClass('revealed');
|
||||
})
|
||||
</script>
|
||||
<script>
|
||||
function deleteLog(event) {
|
||||
event.preventDefault(); // Prevent the default link behavior
|
||||
|
||||
const confirmation = confirm('确认清空标记历史?当前标记也会一并删除');
|
||||
if (confirmation) {
|
||||
const form = document.getElementById('mark_delete');
|
||||
form.submit(); // Submit the form
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{% include "_footer.html" %}
|
||||
</body>
|
||||
</html>
|
|
@ -24,6 +24,7 @@ urlpatterns = [
|
|||
path("comment/<str:item_uuid>", comment, name="comment"),
|
||||
path("mark_log/<str:item_uuid>/<str:log_id>", mark_log, name="mark_log"),
|
||||
path("mark_history/<str:item_uuid>", mark_history, name="mark_history"),
|
||||
path("mark_history/edit/<str:item_uuid>", mark_history_edit, name="mark_history_edit"),
|
||||
path(
|
||||
"add_to_collection/<str:item_uuid>", add_to_collection, name="add_to_collection"
|
||||
),
|
||||
|
|
|
@ -162,7 +162,7 @@ def mark(request, item_uuid):
|
|||
silence = request.POST.get("silence", False)
|
||||
mark.delete(silence=silence)
|
||||
if (
|
||||
silence
|
||||
silence
|
||||
): # this means the mark is deleted from mark_history, thus redirect to item page
|
||||
return redirect(
|
||||
reverse("catalog:retrieve", args=[item.url_path, item.uuid])
|
||||
|
@ -289,6 +289,21 @@ def mark_history(request, item_uuid):
|
|||
)
|
||||
|
||||
|
||||
@login_required
|
||||
def mark_history_edit(request, item_uuid):
|
||||
item = get_object_or_404(Item, uid=get_uuid_or_404(item_uuid))
|
||||
mark = Mark(request.user, item)
|
||||
if request.method == "GET":
|
||||
return render(
|
||||
request,
|
||||
"mark_history_edit.html",
|
||||
{
|
||||
"item": item,
|
||||
"mark": mark,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
def comment(request, item_uuid):
|
||||
item = get_object_or_404(Item, uid=get_uuid_or_404(item_uuid))
|
||||
|
@ -393,10 +408,10 @@ def collection_retrieve(request, collection_uuid):
|
|||
else None
|
||||
)
|
||||
available_as_featured = (
|
||||
request.user.is_authenticated
|
||||
and (following or request.user == collection.owner)
|
||||
and not featured_since
|
||||
and collection.members.all().exists()
|
||||
request.user.is_authenticated
|
||||
and (following or request.user == collection.owner)
|
||||
and not featured_since
|
||||
and collection.members.all().exists()
|
||||
)
|
||||
stats = {}
|
||||
if featured_since:
|
||||
|
@ -713,13 +728,13 @@ def render_list_not_fount(request):
|
|||
|
||||
|
||||
def _render_list(
|
||||
request, user_name, type, shelf_type=None, item_category=None, tag_title=None
|
||||
request, user_name, type, shelf_type=None, item_category=None, tag_title=None
|
||||
):
|
||||
user = User.get(user_name)
|
||||
if user is None:
|
||||
return render_user_not_found(request)
|
||||
if user != request.user and (
|
||||
request.user.is_blocked_by(user) or request.user.is_blocking(user)
|
||||
request.user.is_blocked_by(user) or request.user.is_blocking(user)
|
||||
):
|
||||
return render_user_blocked(request)
|
||||
tag = None
|
||||
|
@ -791,8 +806,8 @@ def user_tag_edit(request):
|
|||
reverse("journal:user_tag_list", args=[request.user.mastodon_acct])
|
||||
)
|
||||
elif (
|
||||
tag_title != tag.title
|
||||
and Tag.objects.filter(owner=request.user, title=tag_title).exists()
|
||||
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"))
|
||||
|
@ -821,7 +836,7 @@ def user_tag_list(request, user_name):
|
|||
if user is None:
|
||||
return render_user_not_found(request)
|
||||
if user != request.user and (
|
||||
request.user.is_blocked_by(user) or request.user.is_blocking(user)
|
||||
request.user.is_blocked_by(user) or request.user.is_blocking(user)
|
||||
):
|
||||
return render_user_blocked(request)
|
||||
tags = Tag.objects.filter(owner=user)
|
||||
|
@ -844,7 +859,7 @@ def user_collection_list(request, user_name):
|
|||
if user is None:
|
||||
return render_user_not_found(request)
|
||||
if user != request.user and (
|
||||
request.user.is_blocked_by(user) or request.user.is_blocking(user)
|
||||
request.user.is_blocked_by(user) or request.user.is_blocking(user)
|
||||
):
|
||||
return render_user_blocked(request)
|
||||
collections = Collection.objects.filter(owner=user)
|
||||
|
@ -869,7 +884,7 @@ def user_liked_collection_list(request, user_name):
|
|||
if user is None:
|
||||
return render_user_not_found(request)
|
||||
if user != request.user and (
|
||||
request.user.is_blocked_by(user) or request.user.is_blocking(user)
|
||||
request.user.is_blocked_by(user) or request.user.is_blocking(user)
|
||||
):
|
||||
return render_user_blocked(request)
|
||||
collections = Collection.objects.filter(likes__owner=user)
|
||||
|
@ -897,7 +912,7 @@ def profile(request, user_name):
|
|||
if not request.user.is_authenticated and user.get_preference().no_anonymous_view:
|
||||
return render(request, "users/home_anonymous.html", {"user": user})
|
||||
if user != request.user and (
|
||||
user.is_blocked_by(request.user) or user.is_blocking(request.user)
|
||||
user.is_blocked_by(request.user) or user.is_blocking(request.user)
|
||||
):
|
||||
return render_user_blocked(request)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue