- Added Gravatar Integration

- Realtime Notify & Notify API
- Some bugs fixed
This commit is contained in:
2025-11-22 23:49:00 +01:00
parent 858c98412f
commit 2ef98ce897
17 changed files with 465 additions and 310 deletions

View File

@@ -1,6 +1,7 @@
from flask_sqlalchemy import SQLAlchemy from flask_sqlalchemy import SQLAlchemy
from flask_login import UserMixin from flask_login import UserMixin
from datetime import datetime from datetime import datetime
from hashlib import md5
db = SQLAlchemy() db = SQLAlchemy()
@@ -38,6 +39,10 @@ class User(UserMixin, db.Model):
def reward_points(self): def reward_points(self):
return sum(r.points for r in self.rewards) return sum(r.points for r in self.rewards)
def avatar(self):
digest = md5(self.email.lower().encode('utf-8')).hexdigest()
return f'https://www.gravatar.com/avatar/{digest}?d=identicon&s=120'
class Friendship(db.Model): class Friendship(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)

View File

@@ -7,3 +7,4 @@ waitress
authlib authlib
sqlalchemy sqlalchemy
requests requests
hashlib

View File

@@ -1,6 +1,6 @@
from flask import Blueprint, redirect, url_for, flash, render_template from flask import Blueprint, jsonify, redirect, request, url_for, flash, render_template
from flask_login import login_required, current_user from flask_login import login_required, current_user
from models import db, Notification from models import User, db, Notification
from flask_babel import gettext as _ from flask_babel import gettext as _
from datetime import datetime, timedelta from datetime import datetime, timedelta
@@ -30,4 +30,21 @@ def notifications():
db.session.query(Notification).filter(Notification.created_at < expire_time).delete() db.session.query(Notification).filter(Notification.created_at < expire_time).delete()
db.session.commit() db.session.commit()
notifications = db.session.query(Notification).filter_by(user_id=current_user.id).order_by(Notification.created_at.desc()).all() notifications = db.session.query(Notification).filter_by(user_id=current_user.id).order_by(Notification.created_at.desc()).all()
return render_template('notifications.html', notifications=notifications) return render_template('notifications.html', notifications=notifications)
@noti_bp.route('/notifications_api')
@login_required
def notifications_api():
expire_time = datetime.now() - timedelta(days=3)
db.session.query(Notification).filter(Notification.created_at < expire_time).delete()
db.session.commit()
notifications = db.session.query(Notification).filter_by(user_id=current_user.id).order_by(Notification.created_at.desc()).all()
return jsonify(
[
{
'name': User.query.get(n.user_id).username,
'data': n.message,
'timestamp': n.created_at
} for n in notifications
]
)

View File

@@ -101,4 +101,13 @@ def delete_account():
@login_required @login_required
def users(): def users():
all_users = db.session.query(User).filter(User.id != current_user.id).all() all_users = db.session.query(User).filter(User.id != current_user.id).all()
return render_template('users.html', users=all_users) return render_template('users.html', users=all_users)
@user_bp.route('/use_gravatar', methods=['POST'])
@login_required
def gravatar():
avatar_url = current_user.avatar()
current_user.profile_pic = avatar_url
db.session.commit()
flash(_('Added Gravatar profile picture.'), 'success')
return redirect(url_for('profil.profile'))

View File

@@ -12,5 +12,8 @@ function reloadEvents() {
}); });
} }
setInterval(reloadEvents, 10000); $(function() {
window.onload = reloadEvents; setInterval(function() {
reloadEvents();
}, 1000);
});

View File

@@ -1,5 +0,0 @@
function reload_feed() {
setTimeout(function() {
window.location.reload();
}, 120000);
}

View File

@@ -51,13 +51,26 @@
<tbody> <tbody>
{% for user in users %} {% for user in users %}
<tr> <tr>
<td>{% if user.profile_pic and user.profile_pic != 'default.png' %}<img src="{{ url_for('static', filename='profile_pics/' ~ user.profile_pic) }}" width="32" class="rounded me-1">{% endif %} {{ user.username }}</td> <td>
{% if user.profile_pic and user.profile_pic != 'default.png' %}
{% if user.profile_pic.startswith('http') %}
<img src="{{ user.profile_pic }}" width="32" class="rounded me-1" alt="Profile Picture">
{% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ user.profile_pic) }}" width="32" class="rounded me-1" alt="Profile Picture">
{% endif %}
{% endif %}
{{ user.username }}
</td>
<td>{{ user.email }}</td> <td>{{ user.email }}</td>
<td>{% if user.is_admin %}<i class="bi bi-check-lg text-success"></i>{% endif %}</td> <td>{% if user.is_admin %}<i class="bi bi-check-lg text-success"></i>{% endif %}</td>
<td>{% if user.is_owner %}<i class="bi bi-star-fill text-warning"></i>{% endif %}</td> <td>{% if user.is_owner %}<i class="bi bi-star-fill text-warning"></i>{% endif %}</td>
<td> <td>
{% if user.profile_pic and user.profile_pic != 'default.png' %} {% if user.profile_pic and user.profile_pic != 'default.png' %}
<img src="{{ url_for('static', filename='profile_pics/' ~ user.profile_pic) }}" width="32" class="rounded me-1"> {% if user.profile_pic.startswith('http') %}
<img src="{{ user.profile_pic }}" width="32" class="rounded me-1" alt="Profile Picture">
{% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ user.profile_pic) }}" width="32" class="rounded me-1" alt="Profile Picture">
{% endif %}
<form action="{{ url_for('admin.admin_delete_pic', user_id=user.id) }}" method="post" style="display:inline;"> <form action="{{ url_for('admin.admin_delete_pic', user_id=user.id) }}" method="post" style="display:inline;">
<button class="btn btn-danger btn-sm" title="{{ _('Delete Picture') }}"><i class="bi bi-image"></i></button> <button class="btn btn-danger btn-sm" title="{{ _('Delete Picture') }}"><i class="bi bi-image"></i></button>
</form> </form>
@@ -103,9 +116,11 @@
<tr> <tr>
<td> <td>
{% if post.user.profile_pic and post.user.profile_pic != 'default.png' %} {% if post.user.profile_pic and post.user.profile_pic != 'default.png' %}
<img src="{{ url_for('static', filename='profile_pics/' ~ post.user.profile_pic) }}" alt="{{ post.user.username }}" class="rounded me-1" width="32">{{ post.user.username }} {% if post.user.profile_pic.startswith('http') %}
{% else %} <img src="{{ post.user.profile_pic }}" width="32" class="rounded me-1" alt="Profile Picture">
<i class="bi bi-person-circle me-1"></i>{{ post.user.username }} {% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ post.user.profile_pic) }}" width="32" class="rounded me-1" alt="Profile Picture">
{% endif %}
{% endif %} {% endif %}
</td> </td>
<td>{{ post.content|truncate(50) }}</td> <td>{{ post.content|truncate(50) }}</td>
@@ -144,16 +159,20 @@
<tr> <tr>
<td> <td>
{% if f.requester.profile_pic and f.requester.profile_pic != 'default.png' %} {% if f.requester.profile_pic and f.requester.profile_pic != 'default.png' %}
<img src="{{ url_for('static', filename='profile_pics/' ~ f.requester.profile_pic) }}" alt="{{ f.requester.username }}" class="rounded me-1" width="32">{{ f.requester.username }} {% if f.requester.profile_pic.startswith('http') %}
{% else %} <img src="{{ f.requester.profile_pic }}" width="32" class="rounded me-1" alt="Profile Picture">
<i class="bi bi-person-circle me-1"></i>{{ f.requester.username }} {% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ f.requester.profile_pic) }}" width="32" class="rounded me-1" alt="Profile Picture">
{% endif %}
{% endif %} {% endif %}
</td> </td>
<td> <td>
{% if f.receiver.profile_pic and f.receiver.profile_pic != 'default.png' %} {% if f.receiver.profile_pic and f.receiver.profile_pic != 'default.png' %}
<img src="{{ url_for('static', filename='profile_pics/' ~ f.receiver.profile_pic) }}" alt="{{ f.receiver.username }}" class="rounded me-1" width="32">{{ f.receiver.username }} {% if f.receiver.profile_pic.startswith('http') %}
{% else %} <img src="{{ f.receiver.profile_pic }}" width="32" class="rounded me-1" alt="Profile Picture">
<i class="bi bi-person-circle me-1"></i>{{ f.receiver.username }} {% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ f.receiver.profile_pic) }}" width="32" class="rounded me-1" alt="Profile Picture">
{% endif %}
{% endif %} {% endif %}
</td> </td>
<td> <td>
@@ -189,9 +208,11 @@
<tr> <tr>
<td> <td>
{% if comment.user.profile_pic and comment.user.profile_pic != 'default.png' %} {% if comment.user.profile_pic and comment.user.profile_pic != 'default.png' %}
<img src="{{ url_for('static', filename='profile_pics/' ~ comment.user.profile_pic) }}" class="rounded me-2" width="32">{{ comment.user.username }} {% if comment.user.profile_pic.startswith('http') %}
{% else %} <img src="{{ comment.user.profile_pic }}" width="32" class="rounded me-1" alt="Profile Picture">
<i class="bi bi-person-circle me-1"></i>{{ comment.user.username }} {% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ comment.user.profile_pic) }}" width="32" class="rounded me-1" alt="Profile Picture">
{% endif %}
{% endif %} {% endif %}
</td> </td>
<td>{{ comment.post.id }}</td> <td>{{ comment.post.id }}</td>
@@ -307,9 +328,11 @@
<tr> <tr>
<td> <td>
{% if usi.user.profile_pic and usi.user.profile_pic != 'default.png' %} {% if usi.user.profile_pic and usi.user.profile_pic != 'default.png' %}
<img src="{{ url_for('static', filename='profile_pics/' ~ usi.user.profile_pic) }}" class="rounded me-2" width="32">{{ usi.user.username }} {% if usi.user.profile_pic.startswith('http') %}
{% else %} <img src="{{ usi.user.profile_pic }}" width="32" class="rounded me-1" alt="Profile Picture">
<i class="bi bi-person-circle me-1"></i>{{ usi.user.username }} {% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ usi.user.profile_pic) }}" width="32" class="rounded me-1" alt="Profile Picture">
{% endif %}
{% endif %} {% endif %}
</td> </td>
<td>{{ usi.item.name }}</td> <td>{{ usi.item.name }}</td>
@@ -335,9 +358,11 @@
<tr> <tr>
<td> <td>
{% if user.profile_pic and user.profile_pic != 'default.png' %} {% if user.profile_pic and user.profile_pic != 'default.png' %}
<img src="{{ url_for('static', filename='profile_pics/' ~ user.profile_pic) }}" class="rounded me-2" width="32">{{ user.username }} {% if user.profile_pic.startswith('http') %}
{% else %} <img src="{{ user.profile_pic }}" width="32" class="rounded me-1" alt="Profile Picture">
<i class="bi bi-person-circle me-1"></i>{{ user.username }} {% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ user.profile_pic) }}" width="32" class="rounded me-1" alt="Profile Picture">
{% endif %}
{% endif %} {% endif %}
</td> </td>
<td>{{ user.reward_points() }}</td> <td>{{ user.reward_points() }}</td>
@@ -358,7 +383,7 @@
</table> </table>
</div> </div>
</div> </div>
<script src="{{ url_for('static', filename='js/adstop.js') }}"></script> <script src="{{ url_for('static', filename='js/adtab.js') }}"></script>
<script> <script>
var triggerTabList = [].slice.call(document.querySelectorAll('#adminTab button')) var triggerTabList = [].slice.call(document.querySelectorAll('#adminTab button'))
triggerTabList.forEach(function (triggerEl) { triggerTabList.forEach(function (triggerEl) {

View File

@@ -8,6 +8,7 @@
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css">
<link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}"> <link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="{{ url_for('static', filename='js/theme.js') }}"></script> <script src="{{ url_for('static', filename='js/theme.js') }}"></script>
<script src="{{ url_for('static', filename='js/translate.js') }}"></script> <script src="{{ url_for('static', filename='js/translate.js') }}"></script>
<link rel="manifest" href="{{ url_for('static', filename='manifest.json') }}"> <link rel="manifest" href="{{ url_for('static', filename='manifest.json') }}">
@@ -43,7 +44,7 @@
<li class="nav-item"><a class="nav-link" href="{{ url_for('user.users') }}"><i class="bi bi-people me-1"></i>{{ _('Users') }}</a></li> <li class="nav-item"><a class="nav-link" href="{{ url_for('user.users') }}"><i class="bi bi-people me-1"></i>{{ _('Users') }}</a></li>
<li class="nav-item"><a class="nav-link" href="{{ url_for('friend.friends') }}"><i class="bi bi-person-check me-1"></i>{{ _('Friends') }}</a></li> <li class="nav-item"><a class="nav-link" href="{{ url_for('friend.friends') }}"><i class="bi bi-person-check me-1"></i>{{ _('Friends') }}</a></li>
<li class="nav-item"><a class="nav-link" href="{{ url_for('profil.my_posts') }}"><i class="bi bi-file-earmark-text me-1"></i>{{ _('My Posts') }}</a></li> <li class="nav-item"><a class="nav-link" href="{{ url_for('profil.my_posts') }}"><i class="bi bi-file-earmark-text me-1"></i>{{ _('My Posts') }}</a></li>
<li class="nav-item"><a class="nav-link" href="{{ url_for('notif.notifications') }}"><i class="bi bi-bell me-1"></i>{{ _('Notifications') }}</a></li> <li class="nav-item"><a class="nav-link" href="{{ url_for('notif.notifications') }}"><span class="badge bg-secondary" id="message_count">0</span><i class="bi bi-bell me-1"></i>{{ _('Notifications') }}</a></li>
<li class="nav-item"><a class="nav-link" href="{{ url_for('profil.profile') }}"><i class="bi bi-person-circle me-1"></i>{{ _('Profile') }}</a></li> <li class="nav-item"><a class="nav-link" href="{{ url_for('profil.profile') }}"><i class="bi bi-person-circle me-1"></i>{{ _('Profile') }}</a></li>
<li class="nav-item"><a class="nav-link" href="{{ url_for('log.logout') }}"><i class="bi bi-box-arrow-right me-1"></i>{{ _('Logout') }}</a></li> <li class="nav-item"><a class="nav-link" href="{{ url_for('log.logout') }}"><i class="bi bi-box-arrow-right me-1"></i>{{ _('Logout') }}</a></li>
<li class="nav-item"><a class="nav-link" href="{{ url_for('support.support') }}"><i class="bi bi-question-circle me-1"></i>{{ _('Support') }}</a></li> <li class="nav-item"><a class="nav-link" href="{{ url_for('support.support') }}"><i class="bi bi-question-circle me-1"></i>{{ _('Support') }}</a></li>
@@ -80,10 +81,18 @@
{% endwith %} {% endwith %}
<div class="d-flex align-items-center mb-3"> <div class="d-flex align-items-center mb-3">
{% if user.profile_pic and user.profile_pic != 'default.png' %} {% if user.profile_pic and user.profile_pic != 'default.png' %}
{% if SHOPITEM_ID_GOLDRAHMEN in user.shop_items | map(attribute='item_id') | list %} {% if user.profile_pic.startswith('http') %}
<img src="{{ url_for('static', filename='profile_pics/' ~ user.profile_pic) }}" class="profile-pic me-2" style="border-color: gold;"> {% if SHOPITEM_ID_GOLDRAHMEN in user.shop_items | map(attribute='item_id') | list %}
<img src="{{ user.profile_pic }}" class="profile-pic me-2" style="border-color: gold;" alt="Profile Picture">
{% else %}
<img src="{{ user.profile_pic }}" class="profile-pic me-2" alt="Profile Picture">
{% endif %}
{% else %} {% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ user.profile_pic) }}" class="profile-pic me-2"> {% if SHOPITEM_ID_GOLDRAHMEN in user.shop_items | map(attribute='item_id') | list %}
<img src="{{ url_for('static', filename='profile_pics/' ~ user.profile_pic) }}" class="profile-pic me-2" style="border-color: gold;">
{% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ user.profile_pic) }}" class="profile-pic me-2">
{% endif %}
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if user.is_authenticated %} {% if user.is_authenticated %}
@@ -108,6 +117,24 @@
&middot; <a href="{{ url_for('credit.credits') }}" class="text-decoration-none">{{ _('Credits') }}</a> &middot; <a href="{{ url_for('credit.credits') }}" class="text-decoration-none">{{ _('Credits') }}</a>
</span> </span>
</div> </div>
</footer> </footer>
<script>
function set_message_count(n) {
$('#message_count').text(n);
}
{% if current_user.is_authenticated %}
$(function() {
setInterval(function() {
$.ajax("{{ url_for('notif.notifications_api') }}").done(
function(notifications) {
for (var i = 0; i < notifications.length; i++) {
set_message_count(i + 1);
}
}
);
}, 1000);
});
{% endif %}
</script>
</body> </body>
</html> </html>

View File

@@ -30,13 +30,21 @@
<div class="card-body"> <div class="card-body">
<div class="d-flex align-items-center mb-2"> <div class="d-flex align-items-center mb-2">
{% if post.user.profile_pic and post.user.profile_pic != 'default.png' %} {% if post.user.profile_pic and post.user.profile_pic != 'default.png' %}
{% if SHOPITEM_ID_GOLDRAHMEN in post.user.shop_items | map(attribute='item_id') | list %} {% if post.user.profile_pic.startswith('http') %}
<img src="{{ url_for('static', filename='profile_pics/' ~ post.user.profile_pic) }}" class="profile-pic me-2" style="border-color: gold;"> {% if SHOPITEM_ID_GOLDRAHMEN in post.user.shop_items | map(attribute='item_id') | list %}
<img src="{{ post.user.profile_pic }}" class="profile-pic me-2" style="border-color: gold;" alt="Profile Picture">
{% else %}
<img src="{{ post.user.profile_pic }}" class="profile-pic me-2" alt="Profile Picture">
{% endif %}
{% else %} {% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ post.user.profile_pic) }}" class="profile-pic me-2"> {% if SHOPITEM_ID_GOLDRAHMEN in post.user.shop_items | map(attribute='item_id') | list %}
<img src="{{ url_for('static', filename='profile_pics/' ~ post.user.profile_pic) }}" class="profile-pic me-2" style="border-color: gold;">
{% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ post.user.profile_pic) }}" class="profile-pic me-2">
{% endif %}
{% endif %} {% endif %}
{% else %} {% else %}
<i class="bi bi-person-circle me-2"></i> <i class="bi bi-person-circle me-2"></i>
{% endif %} {% endif %}
<strong>{{ post.user.username }}</strong> <strong>{{ post.user.username }}</strong>
</div> </div>
@@ -118,5 +126,4 @@
{{ _('No posts available.') }} {{ _('No posts available.') }}
</div> </div>
{% endif %} {% endif %}
<script src="{{ url_for('static', filename='js/feed.js') }}"></script>
{% endblock %} {% endblock %}

View File

@@ -7,10 +7,23 @@
<li class="list-group-item d-flex justify-content-between align-items-center"> <li class="list-group-item d-flex justify-content-between align-items-center">
<span> <span>
{% if friend.profile_pic and friend.profile_pic != 'default.png' %} {% if friend.profile_pic and friend.profile_pic != 'default.png' %}
<img src="{{ url_for('static', filename='profile_pics/' + friend.profile_pic) }}" alt="{{ friend.username }}" class="profile-pic me-2">{{ friend.username }} {% if friend.profile_pic.startswith('http') %}
{% if SHOPITEM_ID_GOLDRAHMEN in friend.shop_items | map(attribute='item_id') | list %}
<img src="{{ friend.profile_pic }}" class="profile-pic me-2" style="border-color: gold;" alt="Profile Picture">
{% else %}
<img src="{{ friend.profile_pic }}" class="profile-pic me-2" alt="Profile Picture">
{% endif %}
{% else %}
{% if SHOPITEM_ID_GOLDRAHMEN in friend.shop_items | map(attribute='item_id') | list %}
<img src="{{ url_for('static', filename='profile_pics/' ~ friend.profile_pic) }}" class="profile-pic me-2" style="border-color: gold;">
{% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ friend.profile_pic) }}" class="profile-pic me-2">
{% endif %}
{% endif %}
{% else %} {% else %}
<i class="bi bi-person-circle me-1"></i>{{ friend.username }} <i class="bi bi-person-circle me-2"></i>
{% endif %} {% endif %}
{{ friend.username }}
</span> </span>
<form action="{{ url_for('friend.remove_friend', user_id=friend.id) }}" method="post" style="display:inline;"> <form action="{{ url_for('friend.remove_friend', user_id=friend.id) }}" method="post" style="display:inline;">
<button class="btn btn-warning btn-sm"><i class="bi bi-person-dash"></i> {{ _('Remove Friend') }}</button> <button class="btn btn-warning btn-sm"><i class="bi bi-person-dash"></i> {{ _('Remove Friend') }}</button>
@@ -26,10 +39,23 @@
<li class="list-group-item d-flex justify-content-between align-items-center"> <li class="list-group-item d-flex justify-content-between align-items-center">
<span> <span>
{% if req.requester.profile_pic and req.requester.profile_pic != 'default.png' %} {% if req.requester.profile_pic and req.requester.profile_pic != 'default.png' %}
<img src="{{ url_for('static', filename='profile_pics/' + req.requester.profile_pic) }}" alt="{{ req.requester.username }}" class="profile-pic me-2">{{ req.requester.username }} {% if req.requester.profile_pic.startswith('http') %}
{% else %} {% if SHOPITEM_ID_GOLDRAHMEN in req.requester.shop_items | map(attribute='item_id') | list %}
<i class="bi bi-person-circle me-1"></i>{{ req.requester.username }} <img src="{{ req.requester.profile_pic }}" class="profile-pic me-2" style="border-color: gold;" alt="Profile Picture">
{% endif %} {% else %}
<img src="{{ req.requester.profile_pic }}" class="profile-pic me-2" alt="Profile Picture">
{% endif %}
{% else %}
{% if SHOPITEM_ID_GOLDRAHMEN in req.requester.shop_items | map(attribute='item_id') | list %}
<img src="{{ url_for('static', filename='profile_pics/' ~ req.requester.profile_pic) }}" class="profile-pic me-2" style="border-color: gold;">
{% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ req.requester.profile_pic) }}" class="profile-pic me-2">
{% endif %}
{% endif %}
{% else %}
<i class="bi bi-person-circle me-2"></i>
{% endif %}
{{ req.requester.username }}
</span> </span>
<div> <div>
<form action="{{ url_for('friend.accept_friend', friendship_id=req.id) }}" method="post" style="display:inline;"> <form action="{{ url_for('friend.accept_friend', friendship_id=req.id) }}" method="post" style="display:inline;">

View File

@@ -7,13 +7,21 @@
<div class="card-body"> <div class="card-body">
<div class="d-flex align-items-center mb-2"> <div class="d-flex align-items-center mb-2">
{% if post.user.profile_pic and post.user.profile_pic != 'default.png' %} {% if post.user.profile_pic and post.user.profile_pic != 'default.png' %}
{% if SHOPITEM_ID_GOLDRAHMEN in post.user.shop_items | map(attribute='item_id') | list %} {% if post.user.profile_pic.startswith('http') %}
<img src="{{ url_for('static', filename='profile_pics/' ~ post.user.profile_pic) }}" class="profile-pic me-2" style="border-color: gold;"> {% if SHOPITEM_ID_GOLDRAHMEN in post.user.shop_items | map(attribute='item_id') | list %}
{% else %} <img src="{{ post.user.profile_pic }}" class="profile-pic me-2" style="border-color: gold;" alt="Profile Picture">
<img src="{{ url_for('static', filename='profile_pics/' ~ post.user.profile_pic) }}" class="profile-pic me-2"> {% else %}
{% endif %} <img src="{{ post.user.profile_pic }}" class="profile-pic me-2" alt="Profile Picture">
{% endif %}
{% else %} {% else %}
<i class="bi bi-person-circle me-1"></i> {% if SHOPITEM_ID_GOLDRAHMEN in post.user.shop_items | map(attribute='item_id') | list %}
<img src="{{ url_for('static', filename='profile_pics/' ~ post.user.profile_pic) }}" class="profile-pic me-2" style="border-color: gold;">
{% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ post.user.profile_pic) }}" class="profile-pic me-2">
{% endif %}
{% endif %}
{% else %}
<i class="bi bi-person-circle me-2"></i>
{% endif %} {% endif %}
<strong>{{ post.user.username }}</strong> <strong>{{ post.user.username }}</strong>
</div> </div>

View File

@@ -3,10 +3,15 @@
{% block content %} {% block content %}
<p><i class="bi bi-envelope-at me-1"></i>{{ _('Email') }}: {{ user.email }}</p> <p><i class="bi bi-envelope-at me-1"></i>{{ _('Email') }}: {{ user.email }}</p>
{% if not user.profile_pic.startswith('http') %}
<form action="{{ url_for('user.upload_pic') }}" method="post" enctype="multipart/form-data" class="mb-3"> <form action="{{ url_for('user.upload_pic') }}" method="post" enctype="multipart/form-data" class="mb-3">
<input type="file" name="profile_pic" required> <input type="file" name="profile_pic" required>
<button class="btn btn-secondary btn-sm" type="submit"><i class="bi bi-upload"></i> {{ _('Upload Picture') }}</button> <button class="btn btn-secondary btn-sm" type="submit"><i class="bi bi-upload"></i> {{ _('Upload Picture') }}</button>
</form> </form>
<form action="{{ url_for('user.gravatar') }}" method="post" style="display:inline;">
<button class="btn btn-secondary btn-sm"><i class="bi bi-globe"></i> {{ _('Use Gravatar') }}</button>
</form>
{% endif %}
{% if user.profile_pic and user.profile_pic != 'default.png' %} {% if user.profile_pic and user.profile_pic != 'default.png' %}
<form action="{{ url_for('user.delete_pic') }}" method="post" style="display:inline;"> <form action="{{ url_for('user.delete_pic') }}" method="post" style="display:inline;">
<button class="btn btn-danger btn-sm"><i class="bi bi-trash"></i> {{ _('Delete Picture') }}</button> <button class="btn btn-danger btn-sm"><i class="bi bi-trash"></i> {{ _('Delete Picture') }}</button>

View File

@@ -18,9 +18,11 @@
<tr> <tr>
<td> <td>
{% if req.user.profile_pic and req.user.profile_pic != 'default.png' %} {% if req.user.profile_pic and req.user.profile_pic != 'default.png' %}
<img src="{{ url_for('static', filename='profile_pics/' ~ req.user.profile_pic) }}" class="rounded me-2" width="32">{{ req.user.username }} {% if req.user.profile_pic.startswith('http') %}
{% else %} <img src="{{ req.user.profile_pic }}" width="32" class="rounded me-1" alt="Profile Picture">
<i class="bi bi-person-circle me-1"></i>{{ req.user.username }} {% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ req.user.profile_pic) }}" width="32" class="rounded me-1" alt="Profile Picture">
{% endif %}
{% endif %} {% endif %}
</td> </td>
<td>{{ req.requested_at.strftime('%Y-%m-%d %H:%M') }}</td> <td>{{ req.requested_at.strftime('%Y-%m-%d %H:%M') }}</td>
@@ -48,9 +50,11 @@
<tr> <tr>
<td> <td>
{% if req.user.profile_pic and req.user.profile_pic != 'default.png' %} {% if req.user.profile_pic and req.user.profile_pic != 'default.png' %}
<img src="{{ url_for('static', filename='profile_pics/' ~ req.user.profile_pic) }}" class="rounded me-2" width="32">{{ req.user.username }} {% if req.user.profile_pic.startswith('http') %}
{% else %} <img src="{{ req.user.profile_pic }}" width="32" class="rounded me-1" alt="Profile Picture">
<i class="bi bi-person-circle me-1"></i>{{ req.user.username }} {% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ req.user.profile_pic) }}" width="32" class="rounded me-1" alt="Profile Picture">
{% endif %}
{% endif %} {% endif %}
</td> </td>
<td>{{ req.requested_at.strftime('%Y-%m-%d %H:%M') }}</td> <td>{{ req.requested_at.strftime('%Y-%m-%d %H:%M') }}</td>
@@ -73,9 +77,11 @@
<tr> <tr>
<td> <td>
{% if req.user.profile_pic and req.user.profile_pic != 'default.png' %} {% if req.user.profile_pic and req.user.profile_pic != 'default.png' %}
<img src="{{ url_for('static', filename='profile_pics/' ~ req.user.profile_pic) }}" class="rounded me-2" width="32">{{ req.user.username }} {% if req.user.profile_pic.startswith('http') %}
{% else %} <img src="{{ req.user.profile_pic }}" width="32" class="rounded me-1" alt="Profile Picture">
<i class="bi bi-person-circle me-1"></i>{{ req.user.username }} {% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ req.user.profile_pic) }}" width="32" class="rounded me-1" alt="Profile Picture">
{% endif %}
{% endif %} {% endif %}
</td> </td>
<td>{{ req.requested_at.strftime('%Y-%m-%d %H:%M') }}</td> <td>{{ req.requested_at.strftime('%Y-%m-%d %H:%M') }}</td>

View File

@@ -6,11 +6,24 @@
{% for user_item in users %} {% for user_item in users %}
<li class="list-group-item d-flex justify-content-between align-items-center"> <li class="list-group-item d-flex justify-content-between align-items-center">
<span> <span>
{% if user_item.profile_pic and user_item.profile_pic != 'default.png' %} {% if user_item.profile_pic and user_item.profile_pic != 'default.png' %}
<img src="{{ url_for('static', filename='profile_pics/' + user_item.profile_pic) }}" alt="{{ user_item.username }}" class="profile-pic me-2">{{ user_item.username }} {% if user_item.profile_pic.startswith('http') %}
{% if SHOPITEM_ID_GOLDRAHMEN in user_item.shop_items | map(attribute='item_id') | list %}
<img src="{{ user_item.profile_pic }}" class="profile-pic me-2" style="border-color: gold;" alt="Profile Picture">
{% else %} {% else %}
<i class="bi bi-person-circle me-1"></i>{{ user_item.username }} <img src="{{ user_item.profile_pic }}" class="profile-pic me-2" alt="Profile Picture">
{% endif %} {% endif %}
{% else %}
{% if SHOPITEM_ID_GOLDRAHMEN in user_item.shop_items | map(attribute='item_id') | list %}
<img src="{{ url_for('static', filename='profile_pics/' ~ user_item.profile_pic) }}" class="profile-pic me-2" style="border-color: gold;">
{% else %}
<img src="{{ url_for('static', filename='profile_pics/' ~ user_item.profile_pic) }}" class="profile-pic me-2">
{% endif %}
{% endif %}
{% else %}
<i class="bi bi-person-circle me-2"></i>
{% endif %}
{{ user_item.username }}
</span> </span>
<div> <div>
{% if user_item.id != user.id %} {% if user_item.id != user.id %}

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2025-09-27 20:09+0200\n" "POT-Creation-Date: 2025-11-22 23:43+0100\n"
"PO-Revision-Date: 2025-09-27 20:09+0200\n" "PO-Revision-Date: 2025-11-22 23:43+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: de\n" "Language: de\n"
"Language-Team: de <LL@li.org>\n" "Language-Team: de <LL@li.org>\n"
@@ -18,43 +18,43 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n" "Generated-By: Babel 2.17.0\n"
#: main.py:34 #: main.py:37
msgid "Please log in to access this page." msgid "Please log in to access this page."
msgstr "" msgstr ""
#: main.py:117 routes/discord.py:44 routes/login.py:46 routes/profile.py:56 #: main.py:168 routes/discord.py:47 routes/login.py:46 routes/profile.py:56
msgid "Passwords do not match." msgid "Passwords do not match."
msgstr "" msgstr ""
#: main.py:119 routes/login.py:48 #: main.py:170 routes/login.py:48
msgid "Username already exists." msgid "Username already exists."
msgstr "" msgstr ""
#: main.py:121 routes/login.py:50 #: main.py:172 routes/login.py:50
msgid "E-Mail already exists." msgid "E-Mail already exists."
msgstr "" msgstr ""
#: main.py:123 routes/discord.py:41 routes/login.py:52 routes/profile.py:53 #: main.py:174 routes/discord.py:44 routes/login.py:52 routes/profile.py:53
msgid "Password must be at least 8 characters long." msgid "Password must be at least 8 characters long."
msgstr "" msgstr ""
#: main.py:125 routes/login.py:54 routes/profile.py:44 #: main.py:176 routes/login.py:54 routes/profile.py:44
msgid "Invalid email address." msgid "Invalid email address."
msgstr "" msgstr ""
#: main.py:127 routes/login.py:56 routes/profile.py:38 #: main.py:178 routes/login.py:56 routes/profile.py:38
msgid "Invalid username. Only alphanumeric characters are allowed." msgid "Invalid username. Only alphanumeric characters are allowed."
msgstr "" msgstr ""
#: main.py:133 #: main.py:184
msgid "Admin account created. You can now log in." msgid "Admin account created. You can now log in."
msgstr "" msgstr ""
#: main.py:159 #: main.py:210
msgid "Already purchased!" msgid "Already purchased!"
msgstr "" msgstr ""
#: main.py:167 #: main.py:218
msgid "Not enough points!" msgid "Not enough points!"
msgstr "" msgstr ""
@@ -126,27 +126,27 @@ msgstr ""
msgid "All Data has been deleted." msgid "All Data has been deleted."
msgstr "" msgstr ""
#: routes/discord.py:24 #: routes/discord.py:27
msgid "Logged in with Discord." msgid "Logged in with Discord."
msgstr "" msgstr ""
#: routes/discord.py:27 #: routes/discord.py:30
msgid "No account linked with this Discord. Please register." msgid "No account linked with this Discord. Please register."
msgstr "" msgstr ""
#: routes/discord.py:47 #: routes/discord.py:50
msgid "Username already exists. Please Report It." msgid "Username already exists. Please Report It."
msgstr "" msgstr ""
#: routes/discord.py:60 #: routes/discord.py:63
msgid "Account created and logged in with Discord." msgid "Account created and logged in with Discord."
msgstr "" msgstr ""
#: routes/discord.py:77 #: routes/discord.py:80
msgid "Discord account linked!" msgid "Discord account linked!"
msgstr "" msgstr ""
#: routes/discord.py:86 #: routes/discord.py:89
msgid "Discord account unlinked!" msgid "Discord account unlinked!"
msgstr "" msgstr ""
@@ -338,7 +338,11 @@ msgstr ""
msgid "Account and all your data deleted." msgid "Account and all your data deleted."
msgstr "" msgstr ""
#: templates/403.html:2 templates/base.html:106 templates/index.html:2 #: routes/user.py:112
msgid "Added Gravatar profile picture."
msgstr ""
#: templates/403.html:2 templates/base.html:115 templates/index.html:2
msgid "Home" msgid "Home"
msgstr "" msgstr ""
@@ -360,11 +364,11 @@ msgstr ""
msgid "Admin" msgid "Admin"
msgstr "" msgstr ""
#: templates/admin.html:4 templates/base.html:39 #: templates/admin.html:4 templates/base.html:40
msgid "Admin Panel" msgid "Admin Panel"
msgstr "" msgstr ""
#: templates/admin.html:8 templates/admin.html:39 templates/base.html:43 #: templates/admin.html:8 templates/admin.html:39 templates/base.html:44
#: templates/users.html:2 #: templates/users.html:2
msgid "Users" msgid "Users"
msgstr "" msgstr ""
@@ -373,19 +377,19 @@ msgstr ""
msgid "Posts" msgid "Posts"
msgstr "" msgstr ""
#: templates/admin.html:14 templates/admin.html:133 #: templates/admin.html:14 templates/admin.html:148
msgid "Friendships" msgid "Friendships"
msgstr "" msgstr ""
#: templates/admin.html:17 templates/admin.html:176 #: templates/admin.html:17 templates/admin.html:195
msgid "Comments" msgid "Comments"
msgstr "" msgstr ""
#: templates/admin.html:20 templates/admin.html:213 #: templates/admin.html:20 templates/admin.html:234
msgid "Uploads" msgid "Uploads"
msgstr "" msgstr ""
#: templates/admin.html:23 templates/admin.html:250 templates/base.html:46 #: templates/admin.html:23 templates/admin.html:271 templates/base.html:47
#: templates/notifications.html:2 templates/notifications.html:6 #: templates/notifications.html:2 templates/notifications.html:6
msgid "Notifications" msgid "Notifications"
msgstr "" msgstr ""
@@ -394,18 +398,18 @@ msgstr ""
msgid "Events" msgid "Events"
msgstr "" msgstr ""
#: templates/admin.html:29 templates/admin.html:297 #: templates/admin.html:29 templates/admin.html:318
msgid "Shop Orders" msgid "Shop Orders"
msgstr "" msgstr ""
#: templates/admin.html:32 templates/admin.html:324 #: templates/admin.html:32 templates/admin.html:347
msgid "Reward Points" msgid "Reward Points"
msgstr "" msgstr ""
#: templates/admin.html:43 templates/admin.html:94 templates/admin.html:180 #: templates/admin.html:43 templates/admin.html:107 templates/admin.html:199
#: templates/admin.html:221 templates/admin.html:258 templates/admin.html:301 #: templates/admin.html:242 templates/admin.html:279 templates/admin.html:322
#: templates/admin.html:328 templates/reset_requests.html:11 #: templates/admin.html:351 templates/reset_requests.html:11
#: templates/reset_requests.html:42 templates/reset_requests.html:67 #: templates/reset_requests.html:44 templates/reset_requests.html:71
msgid "User" msgid "User"
msgstr "" msgstr ""
@@ -422,152 +426,152 @@ msgstr ""
msgid "Profile Pic" msgid "Profile Pic"
msgstr "" msgstr ""
#: templates/admin.html:48 templates/admin.html:98 templates/admin.html:184 #: templates/admin.html:48 templates/admin.html:111 templates/admin.html:203
#: templates/admin.html:225 templates/admin.html:330 #: templates/admin.html:246 templates/admin.html:353
#: templates/reset_requests.html:13 #: templates/reset_requests.html:13
msgid "Actions" msgid "Actions"
msgstr "" msgstr ""
#: templates/admin.html:62 templates/profile.html:12 #: templates/admin.html:75 templates/profile.html:17
msgid "Delete Picture" msgid "Delete Picture"
msgstr "" msgstr ""
#: templates/admin.html:69 templates/users.html:34 #: templates/admin.html:82 templates/users.html:47
msgid "Make Admin" msgid "Make Admin"
msgstr "" msgstr ""
#: templates/admin.html:73 templates/users.html:38 #: templates/admin.html:86 templates/users.html:51
msgid "Remove Admin" msgid "Remove Admin"
msgstr "" msgstr ""
#: templates/admin.html:78 #: templates/admin.html:91
msgid "Delete User" msgid "Delete User"
msgstr "" msgstr ""
#: templates/admin.html:90 #: templates/admin.html:103
msgid "All Posts" msgid "All Posts"
msgstr "" msgstr ""
#: templates/admin.html:95 templates/admin.html:182 templates/edit_post.html:7 #: templates/admin.html:108 templates/admin.html:201 templates/edit_post.html:7
msgid "Content" msgid "Content"
msgstr "" msgstr ""
#: templates/admin.html:96 templates/edit_post.html:16 #: templates/admin.html:109 templates/edit_post.html:16
msgid "Visibility" msgid "Visibility"
msgstr "" msgstr ""
#: templates/admin.html:97 templates/admin.html:183 templates/admin.html:260 #: templates/admin.html:110 templates/admin.html:202 templates/admin.html:281
#: templates/support.html:26 #: templates/support.html:26
msgid "Created" msgid "Created"
msgstr "" msgstr ""
#: templates/admin.html:114 templates/edit_post.html:18 templates/feed.html:18 #: templates/admin.html:129 templates/edit_post.html:18 templates/feed.html:18
#: templates/feed.html:86 templates/my_posts.html:61 #: templates/feed.html:94 templates/my_posts.html:69
msgid "Public" msgid "Public"
msgstr "" msgstr ""
#: templates/admin.html:116 templates/base.html:44 templates/friends.html:2 #: templates/admin.html:131 templates/base.html:45 templates/friends.html:2
msgid "Friends" msgid "Friends"
msgstr "" msgstr ""
#: templates/admin.html:122 #: templates/admin.html:137
msgid "Delete Post" msgid "Delete Post"
msgstr "" msgstr ""
#: templates/admin.html:137 #: templates/admin.html:152
msgid "User 1" msgid "User 1"
msgstr "" msgstr ""
#: templates/admin.html:138 #: templates/admin.html:153
msgid "User 2" msgid "User 2"
msgstr "" msgstr ""
#: templates/admin.html:139 templates/support.html:25 #: templates/admin.html:154 templates/support.html:25
#: templates/support_thread.html:5 #: templates/support_thread.html:5
msgid "Status" msgid "Status"
msgstr "" msgstr ""
#: templates/admin.html:161 #: templates/admin.html:180
msgid "Accepted" msgid "Accepted"
msgstr "" msgstr ""
#: templates/admin.html:163 #: templates/admin.html:182
msgid "Pending" msgid "Pending"
msgstr "" msgstr ""
#: templates/admin.html:165 #: templates/admin.html:184
msgid "Rejected" msgid "Rejected"
msgstr "" msgstr ""
#: templates/admin.html:181 templates/feed.html:21 #: templates/admin.html:200 templates/feed.html:21
msgid "Post" msgid "Post"
msgstr "" msgstr ""
#: templates/admin.html:202 #: templates/admin.html:223
msgid "Delete Comment" msgid "Delete Comment"
msgstr "" msgstr ""
#: templates/admin.html:215 #: templates/admin.html:236
msgid "Delete All Uploads" msgid "Delete All Uploads"
msgstr "" msgstr ""
#: templates/admin.html:222 #: templates/admin.html:243
msgid "Filename" msgid "Filename"
msgstr "" msgstr ""
#: templates/admin.html:223 #: templates/admin.html:244
msgid "Type" msgid "Type"
msgstr "" msgstr ""
#: templates/admin.html:224 #: templates/admin.html:245
msgid "Uploaded" msgid "Uploaded"
msgstr "" msgstr ""
#: templates/admin.html:236 templates/feed.html:55 templates/my_posts.html:32 #: templates/admin.html:257 templates/feed.html:63 templates/my_posts.html:40
msgid "Download" msgid "Download"
msgstr "" msgstr ""
#: templates/admin.html:238 #: templates/admin.html:259
msgid "Delete Upload" msgid "Delete Upload"
msgstr "" msgstr ""
#: templates/admin.html:251 #: templates/admin.html:272
msgid "Are you sure you want to delete all notifications?" msgid "Are you sure you want to delete all notifications?"
msgstr "" msgstr ""
#: templates/admin.html:252 #: templates/admin.html:273
msgid "Delete All Notifications" msgid "Delete All Notifications"
msgstr "" msgstr ""
#: templates/admin.html:259 #: templates/admin.html:280
msgid "Message" msgid "Message"
msgstr "" msgstr ""
#: templates/admin.html:278 #: templates/admin.html:299
msgid "Recent Events" msgid "Recent Events"
msgstr "" msgstr ""
#: templates/admin.html:279 #: templates/admin.html:300
msgid "Are you sure you want to delete all events?" msgid "Are you sure you want to delete all events?"
msgstr "" msgstr ""
#: templates/admin.html:280 #: templates/admin.html:301
msgid "Delete All Events" msgid "Delete All Events"
msgstr "" msgstr ""
#: templates/admin.html:302 #: templates/admin.html:323
msgid "Item" msgid "Item"
msgstr "" msgstr ""
#: templates/admin.html:329 templates/shop.html:17 #: templates/admin.html:352 templates/shop.html:17
msgid "Points" msgid "Points"
msgstr "" msgstr ""
#: templates/admin.html:347 #: templates/admin.html:372
msgid "Add Points" msgid "Add Points"
msgstr "" msgstr ""
#: templates/admin.html:350 #: templates/admin.html:375
msgid "Remove Points" msgid "Remove Points"
msgstr "" msgstr ""
@@ -584,65 +588,65 @@ msgstr ""
msgid "New Password" msgid "New Password"
msgstr "" msgstr ""
#: templates/admin_set_password.html:10 templates/reset_requests.html:28 #: templates/admin_set_password.html:10 templates/reset_requests.html:30
msgid "Set Password" msgid "Set Password"
msgstr "" msgstr ""
#: templates/base.html:40 #: templates/base.html:41
msgid "Reset Requests" msgid "Reset Requests"
msgstr "" msgstr ""
#: templates/base.html:42 templates/base.html:51 templates/feed.html:2 #: templates/base.html:43 templates/base.html:52 templates/feed.html:2
msgid "Feed" msgid "Feed"
msgstr "" msgstr ""
#: templates/base.html:45 templates/my_posts.html:2 templates/my_posts.html:4 #: templates/base.html:46 templates/my_posts.html:2 templates/my_posts.html:4
msgid "My Posts" msgid "My Posts"
msgstr "" msgstr ""
#: templates/base.html:47 templates/profile.html:2 #: templates/base.html:48 templates/profile.html:2
msgid "Profile" msgid "Profile"
msgstr "" msgstr ""
#: templates/base.html:48 #: templates/base.html:49
msgid "Logout" msgid "Logout"
msgstr "" msgstr ""
#: templates/base.html:49 templates/support.html:2 templates/support.html:15 #: templates/base.html:50 templates/support.html:2 templates/support.html:15
msgid "Support" msgid "Support"
msgstr "" msgstr ""
#: templates/base.html:52 templates/index.html:16 templates/login.html:2 #: templates/base.html:53 templates/index.html:16 templates/login.html:2
#: templates/login.html:7 templates/login.html:18 templates/register.html:30 #: templates/login.html:7 templates/login.html:18 templates/register.html:30
#: templates/reset_password.html:17 #: templates/reset_password.html:17
msgid "Login" msgid "Login"
msgstr "" msgstr ""
#: templates/base.html:53 templates/index.html:17 templates/login.html:21 #: templates/base.html:54 templates/index.html:17 templates/login.html:21
#: templates/register.html:2 templates/register.html:7 #: templates/register.html:2 templates/register.html:7
#: templates/register.html:26 #: templates/register.html:26
msgid "Register" msgid "Register"
msgstr "" msgstr ""
#: templates/base.html:57 #: templates/base.html:58
msgid "Theme" msgid "Theme"
msgstr "" msgstr ""
#: templates/base.html:90 #: templates/base.html:99
#, python-format #, python-format
msgid "Welcome, %(username)s!" msgid "Welcome, %(username)s!"
msgstr "" msgstr ""
#: templates/base.html:94 #: templates/base.html:103
msgid "You are logged in as an admin." msgid "You are logged in as an admin."
msgstr "" msgstr ""
#: templates/base.html:107 templates/privacy_policy.html:2 #: templates/base.html:116 templates/privacy_policy.html:2
#: templates/privacy_policy.html:4 #: templates/privacy_policy.html:4
msgid "Privacy Policy" msgid "Privacy Policy"
msgstr "" msgstr ""
#: templates/base.html:108 templates/credits.html:2 templates/credits.html:4 #: templates/base.html:117 templates/credits.html:2 templates/credits.html:4
msgid "Credits" msgid "Credits"
msgstr "" msgstr ""
@@ -750,8 +754,8 @@ msgstr ""
msgid "Limit: 500" msgid "Limit: 500"
msgstr "" msgstr ""
#: templates/edit_post.html:19 templates/feed.html:19 templates/feed.html:84 #: templates/edit_post.html:19 templates/feed.html:19 templates/feed.html:92
#: templates/my_posts.html:59 #: templates/my_posts.html:67
msgid "Friends only" msgid "Friends only"
msgstr "" msgstr ""
@@ -776,7 +780,7 @@ msgid "No uploads found for this post."
msgstr "" msgstr ""
#: templates/edit_profile.html:2 templates/edit_profile.html:4 #: templates/edit_profile.html:2 templates/edit_profile.html:4
#: templates/profile.html:16 #: templates/profile.html:21
msgid "Edit Profile" msgid "Edit Profile"
msgstr "" msgstr ""
@@ -814,41 +818,41 @@ msgstr ""
msgid "to create a post." msgid "to create a post."
msgstr "" msgstr ""
#: templates/feed.html:61 templates/my_posts.html:38 #: templates/feed.html:69 templates/my_posts.html:46
msgid "Download Video" msgid "Download Video"
msgstr "" msgstr ""
#: templates/feed.html:64 templates/my_posts.html:41 #: templates/feed.html:72 templates/my_posts.html:49
msgid "Download Audio" msgid "Download Audio"
msgstr "" msgstr ""
#: templates/feed.html:70 templates/my_posts.html:47 #: templates/feed.html:78 templates/my_posts.html:55
msgid "Like" msgid "Like"
msgstr "" msgstr ""
#: templates/feed.html:73 templates/my_posts.html:50 #: templates/feed.html:81 templates/my_posts.html:58
msgid "Unlike" msgid "Unlike"
msgstr "" msgstr ""
#: templates/feed.html:77 templates/feed.html:107 templates/my_posts.html:53 #: templates/feed.html:85 templates/feed.html:115 templates/my_posts.html:61
#: templates/my_posts.html:77 templates/notifications.html:25 #: templates/my_posts.html:85 templates/notifications.html:25
#: templates/support_thread.html:35 #: templates/support_thread.html:35
msgid "Delete" msgid "Delete"
msgstr "" msgstr ""
#: templates/feed.html:80 templates/my_posts.html:56 #: templates/feed.html:88 templates/my_posts.html:64
msgid "Edit" msgid "Edit"
msgstr "" msgstr ""
#: templates/feed.html:91 templates/my_posts.html:66 #: templates/feed.html:99 templates/my_posts.html:74
msgid "Comment..." msgid "Comment..."
msgstr "" msgstr ""
#: templates/feed.html:95 #: templates/feed.html:103
msgid "Please login to comment." msgid "Please login to comment."
msgstr "" msgstr ""
#: templates/feed.html:118 templates/my_posts.html:88 #: templates/feed.html:126 templates/my_posts.html:96
msgid "No posts available." msgid "No posts available."
msgstr "" msgstr ""
@@ -856,27 +860,27 @@ msgstr ""
msgid "Your Friends" msgid "Your Friends"
msgstr "" msgstr ""
#: templates/friends.html:16 #: templates/friends.html:29
msgid "Remove Friend" msgid "Remove Friend"
msgstr "" msgstr ""
#: templates/friends.html:20 #: templates/friends.html:33
msgid "No friends yet." msgid "No friends yet."
msgstr "" msgstr ""
#: templates/friends.html:23 #: templates/friends.html:36
msgid "Friend Requests" msgid "Friend Requests"
msgstr "" msgstr ""
#: templates/friends.html:36 #: templates/friends.html:62
msgid "Accept" msgid "Accept"
msgstr "" msgstr ""
#: templates/friends.html:39 templates/reset_requests.html:30 #: templates/friends.html:65 templates/reset_requests.html:32
msgid "Reject" msgid "Reject"
msgstr "" msgstr ""
#: templates/friends.html:44 #: templates/friends.html:70
msgid "No new requests" msgid "No new requests"
msgstr "" msgstr ""
@@ -932,7 +936,7 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "" msgstr ""
#: templates/login.html:27 templates/register.html:34 #: templates/login.html:28 templates/register.html:35
msgid "Login with Discord" msgid "Login with Discord"
msgstr "" msgstr ""
@@ -999,27 +1003,31 @@ msgid ""
"contact us." "contact us."
msgstr "" msgstr ""
#: templates/profile.html:8 #: templates/profile.html:9
msgid "Upload Picture" msgid "Upload Picture"
msgstr "" msgstr ""
#: templates/profile.html:15 templates/shop.html:2 templates/shop.html:4 #: templates/profile.html:12
msgid "Use Gravatar"
msgstr ""
#: templates/profile.html:20 templates/shop.html:2 templates/shop.html:4
msgid "Shop" msgid "Shop"
msgstr "" msgstr ""
#: templates/profile.html:18 #: templates/profile.html:23
msgid "Delete Account" msgid "Delete Account"
msgstr "" msgstr ""
#: templates/profile.html:22 #: templates/profile.html:28
msgid "Link Discord Account" msgid "Link Discord Account"
msgstr "" msgstr ""
#: templates/profile.html:25 #: templates/profile.html:31
msgid "Discord Linked" msgid "Discord Linked"
msgstr "" msgstr ""
#: templates/profile.html:28 #: templates/profile.html:34
msgid "Unlink Discord" msgid "Unlink Discord"
msgstr "" msgstr ""
@@ -1043,27 +1051,23 @@ msgstr ""
msgid "Delete All" msgid "Delete All"
msgstr "" msgstr ""
#: templates/reset_requests.html:12 templates/reset_requests.html:43 #: templates/reset_requests.html:12 templates/reset_requests.html:45
#: templates/reset_requests.html:68 #: templates/reset_requests.html:72
msgid "Requested At" msgid "Requested At"
msgstr "" msgstr ""
#: templates/reset_requests.html:38 #: templates/reset_requests.html:40
msgid "Completed Requests" msgid "Completed Requests"
msgstr "" msgstr ""
#: templates/reset_requests.html:63 #: templates/reset_requests.html:67
msgid "Rejected Requests" msgid "Rejected Requests"
msgstr "" msgstr ""
#: templates/reset_requests.html:88 #: templates/reset_requests.html:94
msgid "No open reset requests." msgid "No open reset requests."
msgstr "" msgstr ""
#: templates/secret.html:2
msgid "Secret"
msgstr ""
#: templates/setup.html:2 #: templates/setup.html:2
msgid "Admin Setup" msgid "Admin Setup"
msgstr "" msgstr ""
@@ -1148,19 +1152,19 @@ msgstr ""
msgid "All Users" msgid "All Users"
msgstr "" msgstr ""
#: templates/users.html:20 #: templates/users.html:33
msgid "Request sent" msgid "Request sent"
msgstr "" msgstr ""
#: templates/users.html:22 #: templates/users.html:35
msgid "Request received" msgid "Request received"
msgstr "" msgstr ""
#: templates/users.html:24 #: templates/users.html:37
msgid "Friend" msgid "Friend"
msgstr "" msgstr ""
#: templates/users.html:27 #: templates/users.html:40
msgid "Add Friend" msgid "Add Friend"
msgstr "" msgstr ""

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2025-09-27 20:09+0200\n" "POT-Creation-Date: 2025-11-22 23:43+0100\n"
"PO-Revision-Date: 2025-09-27 20:09+0200\n" "PO-Revision-Date: 2025-11-22 23:44+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n" "Language: en\n"
"Language-Team: en <LL@li.org>\n" "Language-Team: en <LL@li.org>\n"
@@ -18,43 +18,43 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n" "Generated-By: Babel 2.17.0\n"
#: main.py:34 #: main.py:37
msgid "Please log in to access this page." msgid "Please log in to access this page."
msgstr "" msgstr ""
#: main.py:117 routes/discord.py:44 routes/login.py:46 routes/profile.py:56 #: main.py:168 routes/discord.py:47 routes/login.py:46 routes/profile.py:56
msgid "Passwords do not match." msgid "Passwords do not match."
msgstr "" msgstr ""
#: main.py:119 routes/login.py:48 #: main.py:170 routes/login.py:48
msgid "Username already exists." msgid "Username already exists."
msgstr "" msgstr ""
#: main.py:121 routes/login.py:50 #: main.py:172 routes/login.py:50
msgid "E-Mail already exists." msgid "E-Mail already exists."
msgstr "" msgstr ""
#: main.py:123 routes/discord.py:41 routes/login.py:52 routes/profile.py:53 #: main.py:174 routes/discord.py:44 routes/login.py:52 routes/profile.py:53
msgid "Password must be at least 8 characters long." msgid "Password must be at least 8 characters long."
msgstr "" msgstr ""
#: main.py:125 routes/login.py:54 routes/profile.py:44 #: main.py:176 routes/login.py:54 routes/profile.py:44
msgid "Invalid email address." msgid "Invalid email address."
msgstr "" msgstr ""
#: main.py:127 routes/login.py:56 routes/profile.py:38 #: main.py:178 routes/login.py:56 routes/profile.py:38
msgid "Invalid username. Only alphanumeric characters are allowed." msgid "Invalid username. Only alphanumeric characters are allowed."
msgstr "" msgstr ""
#: main.py:133 #: main.py:184
msgid "Admin account created. You can now log in." msgid "Admin account created. You can now log in."
msgstr "" msgstr ""
#: main.py:159 #: main.py:210
msgid "Already purchased!" msgid "Already purchased!"
msgstr "" msgstr ""
#: main.py:167 #: main.py:218
msgid "Not enough points!" msgid "Not enough points!"
msgstr "" msgstr ""
@@ -126,27 +126,27 @@ msgstr ""
msgid "All Data has been deleted." msgid "All Data has been deleted."
msgstr "" msgstr ""
#: routes/discord.py:24 #: routes/discord.py:27
msgid "Logged in with Discord." msgid "Logged in with Discord."
msgstr "" msgstr ""
#: routes/discord.py:27 #: routes/discord.py:30
msgid "No account linked with this Discord. Please register." msgid "No account linked with this Discord. Please register."
msgstr "" msgstr ""
#: routes/discord.py:47 #: routes/discord.py:50
msgid "Username already exists. Please Report It." msgid "Username already exists. Please Report It."
msgstr "" msgstr ""
#: routes/discord.py:60 #: routes/discord.py:63
msgid "Account created and logged in with Discord." msgid "Account created and logged in with Discord."
msgstr "" msgstr ""
#: routes/discord.py:77 #: routes/discord.py:80
msgid "Discord account linked!" msgid "Discord account linked!"
msgstr "" msgstr ""
#: routes/discord.py:86 #: routes/discord.py:89
msgid "Discord account unlinked!" msgid "Discord account unlinked!"
msgstr "" msgstr ""
@@ -338,7 +338,11 @@ msgstr ""
msgid "Account and all your data deleted." msgid "Account and all your data deleted."
msgstr "" msgstr ""
#: templates/403.html:2 templates/base.html:106 templates/index.html:2 #: routes/user.py:112
msgid "Added Gravatar profile picture."
msgstr ""
#: templates/403.html:2 templates/base.html:115 templates/index.html:2
msgid "Home" msgid "Home"
msgstr "" msgstr ""
@@ -360,11 +364,11 @@ msgstr ""
msgid "Admin" msgid "Admin"
msgstr "" msgstr ""
#: templates/admin.html:4 templates/base.html:39 #: templates/admin.html:4 templates/base.html:40
msgid "Admin Panel" msgid "Admin Panel"
msgstr "" msgstr ""
#: templates/admin.html:8 templates/admin.html:39 templates/base.html:43 #: templates/admin.html:8 templates/admin.html:39 templates/base.html:44
#: templates/users.html:2 #: templates/users.html:2
msgid "Users" msgid "Users"
msgstr "" msgstr ""
@@ -373,19 +377,19 @@ msgstr ""
msgid "Posts" msgid "Posts"
msgstr "" msgstr ""
#: templates/admin.html:14 templates/admin.html:133 #: templates/admin.html:14 templates/admin.html:148
msgid "Friendships" msgid "Friendships"
msgstr "" msgstr ""
#: templates/admin.html:17 templates/admin.html:176 #: templates/admin.html:17 templates/admin.html:195
msgid "Comments" msgid "Comments"
msgstr "" msgstr ""
#: templates/admin.html:20 templates/admin.html:213 #: templates/admin.html:20 templates/admin.html:234
msgid "Uploads" msgid "Uploads"
msgstr "" msgstr ""
#: templates/admin.html:23 templates/admin.html:250 templates/base.html:46 #: templates/admin.html:23 templates/admin.html:271 templates/base.html:47
#: templates/notifications.html:2 templates/notifications.html:6 #: templates/notifications.html:2 templates/notifications.html:6
msgid "Notifications" msgid "Notifications"
msgstr "" msgstr ""
@@ -394,18 +398,18 @@ msgstr ""
msgid "Events" msgid "Events"
msgstr "" msgstr ""
#: templates/admin.html:29 templates/admin.html:297 #: templates/admin.html:29 templates/admin.html:318
msgid "Shop Orders" msgid "Shop Orders"
msgstr "" msgstr ""
#: templates/admin.html:32 templates/admin.html:324 #: templates/admin.html:32 templates/admin.html:347
msgid "Reward Points" msgid "Reward Points"
msgstr "" msgstr ""
#: templates/admin.html:43 templates/admin.html:94 templates/admin.html:180 #: templates/admin.html:43 templates/admin.html:107 templates/admin.html:199
#: templates/admin.html:221 templates/admin.html:258 templates/admin.html:301 #: templates/admin.html:242 templates/admin.html:279 templates/admin.html:322
#: templates/admin.html:328 templates/reset_requests.html:11 #: templates/admin.html:351 templates/reset_requests.html:11
#: templates/reset_requests.html:42 templates/reset_requests.html:67 #: templates/reset_requests.html:44 templates/reset_requests.html:71
msgid "User" msgid "User"
msgstr "" msgstr ""
@@ -422,152 +426,152 @@ msgstr ""
msgid "Profile Pic" msgid "Profile Pic"
msgstr "" msgstr ""
#: templates/admin.html:48 templates/admin.html:98 templates/admin.html:184 #: templates/admin.html:48 templates/admin.html:111 templates/admin.html:203
#: templates/admin.html:225 templates/admin.html:330 #: templates/admin.html:246 templates/admin.html:353
#: templates/reset_requests.html:13 #: templates/reset_requests.html:13
msgid "Actions" msgid "Actions"
msgstr "" msgstr ""
#: templates/admin.html:62 templates/profile.html:12 #: templates/admin.html:75 templates/profile.html:17
msgid "Delete Picture" msgid "Delete Picture"
msgstr "" msgstr ""
#: templates/admin.html:69 templates/users.html:34 #: templates/admin.html:82 templates/users.html:47
msgid "Make Admin" msgid "Make Admin"
msgstr "" msgstr ""
#: templates/admin.html:73 templates/users.html:38 #: templates/admin.html:86 templates/users.html:51
msgid "Remove Admin" msgid "Remove Admin"
msgstr "" msgstr ""
#: templates/admin.html:78 #: templates/admin.html:91
msgid "Delete User" msgid "Delete User"
msgstr "" msgstr ""
#: templates/admin.html:90 #: templates/admin.html:103
msgid "All Posts" msgid "All Posts"
msgstr "" msgstr ""
#: templates/admin.html:95 templates/admin.html:182 templates/edit_post.html:7 #: templates/admin.html:108 templates/admin.html:201 templates/edit_post.html:7
msgid "Content" msgid "Content"
msgstr "" msgstr ""
#: templates/admin.html:96 templates/edit_post.html:16 #: templates/admin.html:109 templates/edit_post.html:16
msgid "Visibility" msgid "Visibility"
msgstr "" msgstr ""
#: templates/admin.html:97 templates/admin.html:183 templates/admin.html:260 #: templates/admin.html:110 templates/admin.html:202 templates/admin.html:281
#: templates/support.html:26 #: templates/support.html:26
msgid "Created" msgid "Created"
msgstr "" msgstr ""
#: templates/admin.html:114 templates/edit_post.html:18 templates/feed.html:18 #: templates/admin.html:129 templates/edit_post.html:18 templates/feed.html:18
#: templates/feed.html:86 templates/my_posts.html:61 #: templates/feed.html:94 templates/my_posts.html:69
msgid "Public" msgid "Public"
msgstr "" msgstr ""
#: templates/admin.html:116 templates/base.html:44 templates/friends.html:2 #: templates/admin.html:131 templates/base.html:45 templates/friends.html:2
msgid "Friends" msgid "Friends"
msgstr "" msgstr ""
#: templates/admin.html:122 #: templates/admin.html:137
msgid "Delete Post" msgid "Delete Post"
msgstr "" msgstr ""
#: templates/admin.html:137 #: templates/admin.html:152
msgid "User 1" msgid "User 1"
msgstr "" msgstr ""
#: templates/admin.html:138 #: templates/admin.html:153
msgid "User 2" msgid "User 2"
msgstr "" msgstr ""
#: templates/admin.html:139 templates/support.html:25 #: templates/admin.html:154 templates/support.html:25
#: templates/support_thread.html:5 #: templates/support_thread.html:5
msgid "Status" msgid "Status"
msgstr "" msgstr ""
#: templates/admin.html:161 #: templates/admin.html:180
msgid "Accepted" msgid "Accepted"
msgstr "" msgstr ""
#: templates/admin.html:163 #: templates/admin.html:182
msgid "Pending" msgid "Pending"
msgstr "" msgstr ""
#: templates/admin.html:165 #: templates/admin.html:184
msgid "Rejected" msgid "Rejected"
msgstr "" msgstr ""
#: templates/admin.html:181 templates/feed.html:21 #: templates/admin.html:200 templates/feed.html:21
msgid "Post" msgid "Post"
msgstr "" msgstr ""
#: templates/admin.html:202 #: templates/admin.html:223
msgid "Delete Comment" msgid "Delete Comment"
msgstr "" msgstr ""
#: templates/admin.html:215 #: templates/admin.html:236
msgid "Delete All Uploads" msgid "Delete All Uploads"
msgstr "" msgstr ""
#: templates/admin.html:222 #: templates/admin.html:243
msgid "Filename" msgid "Filename"
msgstr "" msgstr ""
#: templates/admin.html:223 #: templates/admin.html:244
msgid "Type" msgid "Type"
msgstr "" msgstr ""
#: templates/admin.html:224 #: templates/admin.html:245
msgid "Uploaded" msgid "Uploaded"
msgstr "" msgstr ""
#: templates/admin.html:236 templates/feed.html:55 templates/my_posts.html:32 #: templates/admin.html:257 templates/feed.html:63 templates/my_posts.html:40
msgid "Download" msgid "Download"
msgstr "" msgstr ""
#: templates/admin.html:238 #: templates/admin.html:259
msgid "Delete Upload" msgid "Delete Upload"
msgstr "" msgstr ""
#: templates/admin.html:251 #: templates/admin.html:272
msgid "Are you sure you want to delete all notifications?" msgid "Are you sure you want to delete all notifications?"
msgstr "" msgstr ""
#: templates/admin.html:252 #: templates/admin.html:273
msgid "Delete All Notifications" msgid "Delete All Notifications"
msgstr "" msgstr ""
#: templates/admin.html:259 #: templates/admin.html:280
msgid "Message" msgid "Message"
msgstr "" msgstr ""
#: templates/admin.html:278 #: templates/admin.html:299
msgid "Recent Events" msgid "Recent Events"
msgstr "" msgstr ""
#: templates/admin.html:279 #: templates/admin.html:300
msgid "Are you sure you want to delete all events?" msgid "Are you sure you want to delete all events?"
msgstr "" msgstr ""
#: templates/admin.html:280 #: templates/admin.html:301
msgid "Delete All Events" msgid "Delete All Events"
msgstr "" msgstr ""
#: templates/admin.html:302 #: templates/admin.html:323
msgid "Item" msgid "Item"
msgstr "" msgstr ""
#: templates/admin.html:329 templates/shop.html:17 #: templates/admin.html:352 templates/shop.html:17
msgid "Points" msgid "Points"
msgstr "" msgstr ""
#: templates/admin.html:347 #: templates/admin.html:372
msgid "Add Points" msgid "Add Points"
msgstr "" msgstr ""
#: templates/admin.html:350 #: templates/admin.html:375
msgid "Remove Points" msgid "Remove Points"
msgstr "" msgstr ""
@@ -584,65 +588,65 @@ msgstr ""
msgid "New Password" msgid "New Password"
msgstr "" msgstr ""
#: templates/admin_set_password.html:10 templates/reset_requests.html:28 #: templates/admin_set_password.html:10 templates/reset_requests.html:30
msgid "Set Password" msgid "Set Password"
msgstr "" msgstr ""
#: templates/base.html:40 #: templates/base.html:41
msgid "Reset Requests" msgid "Reset Requests"
msgstr "" msgstr ""
#: templates/base.html:42 templates/base.html:51 templates/feed.html:2 #: templates/base.html:43 templates/base.html:52 templates/feed.html:2
msgid "Feed" msgid "Feed"
msgstr "" msgstr ""
#: templates/base.html:45 templates/my_posts.html:2 templates/my_posts.html:4 #: templates/base.html:46 templates/my_posts.html:2 templates/my_posts.html:4
msgid "My Posts" msgid "My Posts"
msgstr "" msgstr ""
#: templates/base.html:47 templates/profile.html:2 #: templates/base.html:48 templates/profile.html:2
msgid "Profile" msgid "Profile"
msgstr "" msgstr ""
#: templates/base.html:48 #: templates/base.html:49
msgid "Logout" msgid "Logout"
msgstr "" msgstr ""
#: templates/base.html:49 templates/support.html:2 templates/support.html:15 #: templates/base.html:50 templates/support.html:2 templates/support.html:15
msgid "Support" msgid "Support"
msgstr "" msgstr ""
#: templates/base.html:52 templates/index.html:16 templates/login.html:2 #: templates/base.html:53 templates/index.html:16 templates/login.html:2
#: templates/login.html:7 templates/login.html:18 templates/register.html:30 #: templates/login.html:7 templates/login.html:18 templates/register.html:30
#: templates/reset_password.html:17 #: templates/reset_password.html:17
msgid "Login" msgid "Login"
msgstr "" msgstr ""
#: templates/base.html:53 templates/index.html:17 templates/login.html:21 #: templates/base.html:54 templates/index.html:17 templates/login.html:21
#: templates/register.html:2 templates/register.html:7 #: templates/register.html:2 templates/register.html:7
#: templates/register.html:26 #: templates/register.html:26
msgid "Register" msgid "Register"
msgstr "" msgstr ""
#: templates/base.html:57 #: templates/base.html:58
msgid "Theme" msgid "Theme"
msgstr "" msgstr ""
#: templates/base.html:90 #: templates/base.html:99
#, python-format #, python-format
msgid "Welcome, %(username)s!" msgid "Welcome, %(username)s!"
msgstr "" msgstr ""
#: templates/base.html:94 #: templates/base.html:103
msgid "You are logged in as an admin." msgid "You are logged in as an admin."
msgstr "" msgstr ""
#: templates/base.html:107 templates/privacy_policy.html:2 #: templates/base.html:116 templates/privacy_policy.html:2
#: templates/privacy_policy.html:4 #: templates/privacy_policy.html:4
msgid "Privacy Policy" msgid "Privacy Policy"
msgstr "" msgstr ""
#: templates/base.html:108 templates/credits.html:2 templates/credits.html:4 #: templates/base.html:117 templates/credits.html:2 templates/credits.html:4
msgid "Credits" msgid "Credits"
msgstr "" msgstr ""
@@ -750,8 +754,8 @@ msgstr ""
msgid "Limit: 500" msgid "Limit: 500"
msgstr "" msgstr ""
#: templates/edit_post.html:19 templates/feed.html:19 templates/feed.html:84 #: templates/edit_post.html:19 templates/feed.html:19 templates/feed.html:92
#: templates/my_posts.html:59 #: templates/my_posts.html:67
msgid "Friends only" msgid "Friends only"
msgstr "" msgstr ""
@@ -776,7 +780,7 @@ msgid "No uploads found for this post."
msgstr "" msgstr ""
#: templates/edit_profile.html:2 templates/edit_profile.html:4 #: templates/edit_profile.html:2 templates/edit_profile.html:4
#: templates/profile.html:16 #: templates/profile.html:21
msgid "Edit Profile" msgid "Edit Profile"
msgstr "" msgstr ""
@@ -814,41 +818,41 @@ msgstr ""
msgid "to create a post." msgid "to create a post."
msgstr "" msgstr ""
#: templates/feed.html:61 templates/my_posts.html:38 #: templates/feed.html:69 templates/my_posts.html:46
msgid "Download Video" msgid "Download Video"
msgstr "" msgstr ""
#: templates/feed.html:64 templates/my_posts.html:41 #: templates/feed.html:72 templates/my_posts.html:49
msgid "Download Audio" msgid "Download Audio"
msgstr "" msgstr ""
#: templates/feed.html:70 templates/my_posts.html:47 #: templates/feed.html:78 templates/my_posts.html:55
msgid "Like" msgid "Like"
msgstr "" msgstr ""
#: templates/feed.html:73 templates/my_posts.html:50 #: templates/feed.html:81 templates/my_posts.html:58
msgid "Unlike" msgid "Unlike"
msgstr "" msgstr ""
#: templates/feed.html:77 templates/feed.html:107 templates/my_posts.html:53 #: templates/feed.html:85 templates/feed.html:115 templates/my_posts.html:61
#: templates/my_posts.html:77 templates/notifications.html:25 #: templates/my_posts.html:85 templates/notifications.html:25
#: templates/support_thread.html:35 #: templates/support_thread.html:35
msgid "Delete" msgid "Delete"
msgstr "" msgstr ""
#: templates/feed.html:80 templates/my_posts.html:56 #: templates/feed.html:88 templates/my_posts.html:64
msgid "Edit" msgid "Edit"
msgstr "" msgstr ""
#: templates/feed.html:91 templates/my_posts.html:66 #: templates/feed.html:99 templates/my_posts.html:74
msgid "Comment..." msgid "Comment..."
msgstr "" msgstr ""
#: templates/feed.html:95 #: templates/feed.html:103
msgid "Please login to comment." msgid "Please login to comment."
msgstr "" msgstr ""
#: templates/feed.html:118 templates/my_posts.html:88 #: templates/feed.html:126 templates/my_posts.html:96
msgid "No posts available." msgid "No posts available."
msgstr "" msgstr ""
@@ -856,27 +860,27 @@ msgstr ""
msgid "Your Friends" msgid "Your Friends"
msgstr "" msgstr ""
#: templates/friends.html:16 #: templates/friends.html:29
msgid "Remove Friend" msgid "Remove Friend"
msgstr "" msgstr ""
#: templates/friends.html:20 #: templates/friends.html:33
msgid "No friends yet." msgid "No friends yet."
msgstr "" msgstr ""
#: templates/friends.html:23 #: templates/friends.html:36
msgid "Friend Requests" msgid "Friend Requests"
msgstr "" msgstr ""
#: templates/friends.html:36 #: templates/friends.html:62
msgid "Accept" msgid "Accept"
msgstr "" msgstr ""
#: templates/friends.html:39 templates/reset_requests.html:30 #: templates/friends.html:65 templates/reset_requests.html:32
msgid "Reject" msgid "Reject"
msgstr "" msgstr ""
#: templates/friends.html:44 #: templates/friends.html:70
msgid "No new requests" msgid "No new requests"
msgstr "" msgstr ""
@@ -932,7 +936,7 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "" msgstr ""
#: templates/login.html:27 templates/register.html:34 #: templates/login.html:28 templates/register.html:35
msgid "Login with Discord" msgid "Login with Discord"
msgstr "" msgstr ""
@@ -999,27 +1003,31 @@ msgid ""
"contact us." "contact us."
msgstr "" msgstr ""
#: templates/profile.html:8 #: templates/profile.html:9
msgid "Upload Picture" msgid "Upload Picture"
msgstr "" msgstr ""
#: templates/profile.html:15 templates/shop.html:2 templates/shop.html:4 #: templates/profile.html:12
msgid "Use Gravatar"
msgstr ""
#: templates/profile.html:20 templates/shop.html:2 templates/shop.html:4
msgid "Shop" msgid "Shop"
msgstr "" msgstr ""
#: templates/profile.html:18 #: templates/profile.html:23
msgid "Delete Account" msgid "Delete Account"
msgstr "" msgstr ""
#: templates/profile.html:22 #: templates/profile.html:28
msgid "Link Discord Account" msgid "Link Discord Account"
msgstr "" msgstr ""
#: templates/profile.html:25 #: templates/profile.html:31
msgid "Discord Linked" msgid "Discord Linked"
msgstr "" msgstr ""
#: templates/profile.html:28 #: templates/profile.html:34
msgid "Unlink Discord" msgid "Unlink Discord"
msgstr "" msgstr ""
@@ -1043,27 +1051,23 @@ msgstr ""
msgid "Delete All" msgid "Delete All"
msgstr "" msgstr ""
#: templates/reset_requests.html:12 templates/reset_requests.html:43 #: templates/reset_requests.html:12 templates/reset_requests.html:45
#: templates/reset_requests.html:68 #: templates/reset_requests.html:72
msgid "Requested At" msgid "Requested At"
msgstr "" msgstr ""
#: templates/reset_requests.html:38 #: templates/reset_requests.html:40
msgid "Completed Requests" msgid "Completed Requests"
msgstr "" msgstr ""
#: templates/reset_requests.html:63 #: templates/reset_requests.html:67
msgid "Rejected Requests" msgid "Rejected Requests"
msgstr "" msgstr ""
#: templates/reset_requests.html:88 #: templates/reset_requests.html:94
msgid "No open reset requests." msgid "No open reset requests."
msgstr "" msgstr ""
#: templates/secret.html:2
msgid "Secret"
msgstr ""
#: templates/setup.html:2 #: templates/setup.html:2
msgid "Admin Setup" msgid "Admin Setup"
msgstr "" msgstr ""
@@ -1148,19 +1152,19 @@ msgstr ""
msgid "All Users" msgid "All Users"
msgstr "" msgstr ""
#: templates/users.html:20 #: templates/users.html:33
msgid "Request sent" msgid "Request sent"
msgstr "" msgstr ""
#: templates/users.html:22 #: templates/users.html:35
msgid "Request received" msgid "Request received"
msgstr "" msgstr ""
#: templates/users.html:24 #: templates/users.html:37
msgid "Friend" msgid "Friend"
msgstr "" msgstr ""
#: templates/users.html:27 #: templates/users.html:40
msgid "Add Friend" msgid "Add Friend"
msgstr "" msgstr ""