fix: badges printing layout

This commit is contained in:
vas3k 2024-05-07 09:50:04 +02:00
parent 248ba3caf4
commit 3d41649bf6
2 changed files with 70 additions and 60 deletions

View File

@ -8,6 +8,10 @@
{% block css %}
<style>
body, html {
background-color: white; /* for printing */
}
.badge-generator {
max-width: 800px; /* good for A4 printing */
margin: 0 auto;
@ -25,17 +29,6 @@
padding: 10px;
}
.user-stats {
grid-column-start: 1;
grid-column-end: 3;
font-size: 80%;
gap: 10px;
display: flex;
justify-content: flex-start;
padding-top: 15px;
padding-bottom: 0;
}
.profile-card {
color-adjust: exact;
-webkit-print-color-adjust: exact;
@ -45,45 +38,67 @@
grid-template-rows: auto auto;
box-shadow: none;
margin-bottom: 0;
padding: 20px;
padding: 30px 20px 20px;
}
.profile-card-info {
font-size: 80%;
font-size: 85%;
padding-top: 0;
}
.profile-user-name {
padding-bottom: 7px;
line-height: 1.1em;
}
.profile-user-job {
font-size: 110%;
}
.profile-user-fullname {
margin-right: 0;
}
.profile-user-nickname {
position: relative;
top: -0.2em;
font-size: 60%;
top: -0.1em;
font-size: 70%;
opacity: 1;
color: #777;
}
.user-stats {
.user-badges {
grid-column-start: 1;
grid-column-end: 3;
font-size: 80%;
gap: 10px;
display: flex;
justify-content: center;
padding-top: 9px;
padding-bottom: 0;
flex-direction: row;
flex-wrap: wrap;
gap: 10px;
align-items: center;
}
.user-stats-item {
font-size: 90%;
display: flex;
flex-direction: row;
gap: 3px;
line-height: 1.1em;
text-align: center;
border-radius: 5px;
min-width: 25px;
padding: 6px 5px 6px;
color: var(--text-color);
background-color: var(--bg-color);
}
.user-age {
font-size: 70%;
max-width: 50%;
margin: 0 auto;
display: flex;
flex-direction: row;
justify-content: center;
gap: 3px;
line-height: 1.1em;
border-radius: 5px;
min-width: 25px;
padding: 6px 5px 6px;
color: var(--text-color);
background-color: var(--bg-color);
position: relative;
top: -5px;
}
</style>
{% endblock %}
@ -94,7 +109,7 @@
<div class="content-header">Генератор бейджиков</div>
<div class="block">
<form action="." method="post">
<form action="." method="get">
<span class="form-row">
<textarea name="users">{{ requested_users }}</textarea>
</span>
@ -129,6 +144,21 @@
<div class="block profile-card h-card">
<div class="profile-card-photo u-photo">
<div class="avatar profile-user-avatar"><img src="{{ user.get_avatar }}" alt="Аватар {{ user.full_name }}" loading="lazy" /></div>
{% if not hide_stats %}
<div class="user-age">
{% if user.membership_created_days < 40 %}
<span class="profile-status-number">{{ user.membership_created_days | ceil | cool_number }}</span>
<span class="profile-status-text">{{ user.membership_created_days | ceil | rupluralize:"день,дня,дней" }}</span>
{% elif user.membership_created_days <= 360 %}
<span class="profile-status-number">{{ user.membership_created_days | days_to_months | cool_number }}</span>
<span class="profile-status-text">мес.</span>
{% else %}
<span class="profile-status-number">{{ user.membership_created_days | days_to_years | cool_number }}</span>
<span class="profile-status-text">{{ user.membership_created_days | days_to_years | rupluralize:"год,года,лет" }}</span>
{% endif %}
</div>
{% endif %}
</div>
<div class="profile-card-info">
<a href="{% url "profile" user.slug %}" class="profile-user-name u-url">
@ -155,30 +185,7 @@
</div>
{% endif %}
</div>
<div class="user-stats">
{% if not hide_stats %}
<div class="user-stats-item">
{% if user.membership_created_days < 40 %}
<span class="profile-status-number">{{ user.membership_created_days | ceil | cool_number }}</span>
<span class="profile-status-text">{{ user.membership_created_days | ceil | rupluralize:"день,дня,дней" }}</span>
{% elif user.membership_created_days <= 360 %}
<span class="profile-status-number">{{ user.membership_created_days | days_to_months | cool_number }}</span>
<span class="profile-status-text">мес.</span>
{% else %}
<span class="profile-status-number">{{ user.membership_created_days | days_to_years | cool_number }}</span>
<span class="profile-status-text">{{ user.membership_created_days | days_to_years | rupluralize:"год,года,лет" }}</span>
{% endif %}
</div>
<div class="user-stats-item">
<div class="profile-status-number">+{{ user.upvotes | cool_number }}</div>
</div>
{% if user.hat %}
{% include "users/widgets/hat.html" with hat=user.hat %}
{% endif %}
{% endif %}
<div class="user-badges">
{% if not hide_badges and user.badges %}
{% include "badges/widgets/badges.html" with badges=user.badges badge_size="small" %}
{% endif %}

View File

@ -146,7 +146,7 @@ def godmode_invite(request):
@require_auth
def badge_generator(request):
requested_users = request.POST.get("users")
requested_users = request.GET.get("users")
if requested_users:
requested_users = requested_users.split(",")
else:
@ -157,15 +157,18 @@ def badge_generator(request):
for user in users:
user.badges = UserBadge.user_badges_grouped(user=user)
repeat = int(request.POST.get("repeat") or 1)
repeat = int(request.GET.get("repeat") or 1)
if repeat > 1:
users = [u for u in users for _ in range(repeat)]
# sort by name
users = sorted(users, key=lambda u: u.full_name.lower())
return render(request, "admin/badge_generator.html", {
"users": users,
"requested_users": ",".join(requested_users),
"hide_bio": request.POST.get("hide_bio"),
"hide_stats": request.POST.get("hide_stats"),
"hide_badges": request.POST.get("hide_badges"),
"hide_bio": request.GET.get("hide_bio"),
"hide_stats": request.GET.get("hide_stats"),
"hide_badges": request.GET.get("hide_badges"),
"repeat": repeat,
})