forked from rDrama/rDrama
dfs
parent
8854bfd1c4
commit
a75a95fcf8
|
@ -266,7 +266,7 @@ class User(Base):
|
||||||
elif sort == "old":
|
elif sort == "old":
|
||||||
posts = posts.order_by(Submission.created_utc.asc())
|
posts = posts.order_by(Submission.created_utc.asc())
|
||||||
elif sort == "controversial":
|
elif sort == "controversial":
|
||||||
posts = posts.order_by(-1 * Submission.upvotes * Submission.downvotes)
|
posts = posts.order_by(-1 * Submission.upvotes * Submission.downvotes * Submission.downvotes)
|
||||||
elif sort == "top":
|
elif sort == "top":
|
||||||
posts = posts.order_by(Submission.downvotes - Submission.upvotes)
|
posts = posts.order_by(Submission.downvotes - Submission.upvotes)
|
||||||
elif sort == "bottom":
|
elif sort == "bottom":
|
||||||
|
|
|
@ -14,9 +14,8 @@ def filter_comment_html(html_text):
|
||||||
|
|
||||||
for link in links:
|
for link in links:
|
||||||
|
|
||||||
href=link.get("href", None)
|
href = link.get("href")
|
||||||
if not href:
|
if not href: continue
|
||||||
continue
|
|
||||||
|
|
||||||
domain = urlparse(href).netloc
|
domain = urlparse(href).netloc
|
||||||
|
|
||||||
|
@ -30,7 +29,5 @@ def filter_comment_html(html_text):
|
||||||
|
|
||||||
bans = [x for x in g.db.query(BannedDomain).options(lazyload('*')).filter(BannedDomain.domain.in_(list(domain_list))).all()]
|
bans = [x for x in g.db.query(BannedDomain).options(lazyload('*')).filter(BannedDomain.domain.in_(list(domain_list))).all()]
|
||||||
|
|
||||||
if bans:
|
if bans: return bans
|
||||||
return bans
|
else: return []
|
||||||
else:
|
|
||||||
return []
|
|
||||||
|
|
|
@ -166,13 +166,7 @@ def api_comment(v):
|
||||||
if bans:
|
if bans:
|
||||||
ban = bans[0]
|
ban = bans[0]
|
||||||
reason = f"Remove the {ban.domain} link from your comment and try again."
|
reason = f"Remove the {ban.domain} link from your comment and try again."
|
||||||
if ban.reason:
|
if ban.reason: reason += f" {ban.reason}"
|
||||||
reason += f" {ban.reason}"
|
|
||||||
|
|
||||||
if any([x.reason==4 for x in bans]):
|
|
||||||
v.ban(days=30, reason="Digitally malicious content")
|
|
||||||
if any([x.reason==7 for x in bans]):
|
|
||||||
v.ban( reason="Sexualizing minors")
|
|
||||||
return {"error": reason}, 401
|
return {"error": reason}, 401
|
||||||
|
|
||||||
existing = g.db.query(Comment).options(lazyload('*')).filter(Comment.author_id == v.id,
|
existing = g.db.query(Comment).options(lazyload('*')).filter(Comment.author_id == v.id,
|
||||||
|
@ -591,12 +585,7 @@ def edit_comment(cid, v):
|
||||||
ban = bans[0]
|
ban = bans[0]
|
||||||
reason = f"Remove the {ban.domain} link from your comment and try again."
|
reason = f"Remove the {ban.domain} link from your comment and try again."
|
||||||
|
|
||||||
if any([x.reason==4 for x in bans]):
|
if ban.reason: reason += f" {ban.reason}"
|
||||||
v.ban(days=30, reason="Digitally malicious content is not allowed.")
|
|
||||||
return {"error":"Digitally malicious content is not allowed."}
|
|
||||||
|
|
||||||
if ban.reason:
|
|
||||||
reason += f" {ban.reason}"
|
|
||||||
|
|
||||||
if request.headers.get("Authorization"): return {'error': f'A blacklisted domain was used.'}, 400
|
if request.headers.get("Authorization"): return {'error': f'A blacklisted domain was used.'}, 400
|
||||||
else: return render_template("comment_failed.html",
|
else: return render_template("comment_failed.html",
|
||||||
|
|
|
@ -199,7 +199,7 @@ def frontlist(v=None, sort="hot", page=1, t="all", ids_only=True, filter_words='
|
||||||
elif sort == "old":
|
elif sort == "old":
|
||||||
posts = posts.order_by(Submission.created_utc.asc())
|
posts = posts.order_by(Submission.created_utc.asc())
|
||||||
elif sort == "controversial":
|
elif sort == "controversial":
|
||||||
posts = posts.order_by(-1 * Submission.upvotes * Submission.downvotes)
|
posts = posts.order_by(-1 * Submission.upvotes * Submission.downvotes * Submission.downvotes)
|
||||||
elif sort == "top":
|
elif sort == "top":
|
||||||
posts = posts.order_by(Submission.downvotes - Submission.upvotes)
|
posts = posts.order_by(Submission.downvotes - Submission.upvotes)
|
||||||
elif sort == "bottom":
|
elif sort == "bottom":
|
||||||
|
@ -297,7 +297,7 @@ def changeloglist(v=None, sort="new", page=1 ,t="all"):
|
||||||
elif sort == "old":
|
elif sort == "old":
|
||||||
posts = posts.order_by(Submission.created_utc.asc())
|
posts = posts.order_by(Submission.created_utc.asc())
|
||||||
elif sort == "controversial":
|
elif sort == "controversial":
|
||||||
posts = posts.order_by(-1 * Submission.upvotes * Submission.downvotes)
|
posts = posts.order_by(-1 * Submission.upvotes * Submission.downvotes * Submission.downvotes)
|
||||||
elif sort == "top":
|
elif sort == "top":
|
||||||
posts = posts.order_by(Submission.downvotes - Submission.upvotes)
|
posts = posts.order_by(Submission.downvotes - Submission.upvotes)
|
||||||
elif sort == "bottom":
|
elif sort == "bottom":
|
||||||
|
@ -367,7 +367,7 @@ def comment_idlist(page=1, v=None, nsfw=False, sort="new", t="all"):
|
||||||
elif sort == "old":
|
elif sort == "old":
|
||||||
comments = comments.order_by(Comment.created_utc.asc())
|
comments = comments.order_by(Comment.created_utc.asc())
|
||||||
elif sort == "controversial":
|
elif sort == "controversial":
|
||||||
comments = comments.order_by(-1 * Comment.upvotes * Comment.downvotes)
|
comments = comments.order_by(-1 * Comment.upvotes * Comment.downvotes * Comment.downvotes)
|
||||||
elif sort == "top":
|
elif sort == "top":
|
||||||
comments = comments.order_by(Comment.downvotes - Comment.upvotes)
|
comments = comments.order_by(Comment.downvotes - Comment.upvotes)
|
||||||
elif sort == "bottom":
|
elif sort == "bottom":
|
||||||
|
|
|
@ -143,7 +143,7 @@ def post_id(pid, anything=None, v=None):
|
||||||
elif sort == "old":
|
elif sort == "old":
|
||||||
comments = comments.order_by(Comment.created_utc.asc())
|
comments = comments.order_by(Comment.created_utc.asc())
|
||||||
elif sort == "controversial":
|
elif sort == "controversial":
|
||||||
comments = comments.order_by(-1 * Comment.upvotes * Comment.downvotes)
|
comments = comments.order_by(-1 * Comment.upvotes * Comment.downvotes * Comment.downvotes)
|
||||||
elif sort == "top":
|
elif sort == "top":
|
||||||
comments = comments.order_by(Comment.downvotes - Comment.upvotes)
|
comments = comments.order_by(Comment.downvotes - Comment.upvotes)
|
||||||
elif sort == "bottom":
|
elif sort == "bottom":
|
||||||
|
@ -168,7 +168,7 @@ def post_id(pid, anything=None, v=None):
|
||||||
elif sort == "old":
|
elif sort == "old":
|
||||||
comments = comments.order_by(Comment.created_utc.asc())
|
comments = comments.order_by(Comment.created_utc.asc())
|
||||||
elif sort == "controversial":
|
elif sort == "controversial":
|
||||||
comments = comments.order_by(-1 * Comment.upvotes * Comment.downvotes)
|
comments = comments.order_by(-1 * Comment.upvotes * Comment.downvotes * Comment.downvotes)
|
||||||
elif sort == "top":
|
elif sort == "top":
|
||||||
comments = comments.order_by(Comment.downvotes - Comment.upvotes)
|
comments = comments.order_by(Comment.downvotes - Comment.upvotes)
|
||||||
elif sort == "bottom":
|
elif sort == "bottom":
|
||||||
|
@ -218,10 +218,6 @@ def edit_post(pid, v):
|
||||||
if ban.reason:
|
if ban.reason:
|
||||||
reason += f" {ban.reason}"
|
reason += f" {ban.reason}"
|
||||||
|
|
||||||
if any([x.reason==4 for x in bans]):
|
|
||||||
v.ban(days=30, reason="Digitally malicious content is not allowed.")
|
|
||||||
abort(403)
|
|
||||||
|
|
||||||
return {"error": reason}, 403
|
return {"error": reason}, 403
|
||||||
|
|
||||||
p.body = body
|
p.body = body
|
||||||
|
@ -536,9 +532,6 @@ def submit_post(v):
|
||||||
|
|
||||||
domain_obj = get_domain(domain)
|
domain_obj = get_domain(domain)
|
||||||
if domain_obj:
|
if domain_obj:
|
||||||
if domain_obj.reason==4: v.ban(days=30, reason="Digitally malicious content")
|
|
||||||
elif domain_obj.reason==7: v.ban(reason="Sexualizing minors")
|
|
||||||
|
|
||||||
if request.headers.get("Authorization"): return {"error":"ToS violation"}, 400
|
if request.headers.get("Authorization"): return {"error":"ToS violation"}, 400
|
||||||
else: return render_template("submit.html", v=v, error="ToS Violation", title=title, url=url, body=request.values.get("body", "")), 400
|
else: return render_template("submit.html", v=v, error="ToS Violation", title=title, url=url, body=request.values.get("body", "")), 400
|
||||||
elif "twitter.com" in domain:
|
elif "twitter.com" in domain:
|
||||||
|
@ -668,13 +661,7 @@ def submit_post(v):
|
||||||
if bans:
|
if bans:
|
||||||
ban = bans[0]
|
ban = bans[0]
|
||||||
reason = f"Remove the {ban.domain} link from your post and try again."
|
reason = f"Remove the {ban.domain} link from your post and try again."
|
||||||
if ban.reason:
|
if ban.reason: reason += f" {ban.reason}"
|
||||||
reason += f" {ban.reason}"
|
|
||||||
|
|
||||||
if any([x.reason==4 for x in bans]):
|
|
||||||
v.ban(days=30, reason="Digitally malicious content is not allowed.")
|
|
||||||
abort(403)
|
|
||||||
|
|
||||||
if request.headers.get("Authorization"): return {"error": reason}, 403
|
if request.headers.get("Authorization"): return {"error": reason}, 403
|
||||||
else: return render_template("submit.html", v=v, error=reason, title=title, url=url, body=request.values.get("body", "")), 403
|
else: return render_template("submit.html", v=v, error=reason, title=title, url=url, body=request.values.get("body", "")), 403
|
||||||
|
|
||||||
|
|
|
@ -132,7 +132,7 @@ def searchposts(v):
|
||||||
elif sort == "old":
|
elif sort == "old":
|
||||||
posts = posts.order_by(Submission.created_utc.asc())
|
posts = posts.order_by(Submission.created_utc.asc())
|
||||||
elif sort == "controversial":
|
elif sort == "controversial":
|
||||||
posts = posts.order_by(-1 * Submission.upvotes * Submission.downvotes)
|
posts = posts.order_by(-1 * Submission.upvotes * Submission.downvotes * Submission.downvotes)
|
||||||
elif sort == "top":
|
elif sort == "top":
|
||||||
posts = posts.order_by(Submission.downvotes - Submission.upvotes)
|
posts = posts.order_by(Submission.downvotes - Submission.upvotes)
|
||||||
elif sort == "bottom":
|
elif sort == "bottom":
|
||||||
|
@ -235,7 +235,7 @@ def searchcomments(v):
|
||||||
elif sort == "old":
|
elif sort == "old":
|
||||||
comments = comments.order_by(Comment.created_utc.asc())
|
comments = comments.order_by(Comment.created_utc.asc())
|
||||||
elif sort == "controversial":
|
elif sort == "controversial":
|
||||||
comments = comments.order_by(-1 * Comment.upvotes * Comment.downvotes)
|
comments = comments.order_by(-1 * Comment.upvotes * Comment.downvotes * Comment.downvotes)
|
||||||
elif sort == "top":
|
elif sort == "top":
|
||||||
comments = comments.order_by(Comment.downvotes - Comment.upvotes)
|
comments = comments.order_by(Comment.downvotes - Comment.upvotes)
|
||||||
elif sort == "bottom":
|
elif sort == "bottom":
|
||||||
|
|
|
@ -135,8 +135,6 @@ def settings_profile_post(v):
|
||||||
if ban.reason:
|
if ban.reason:
|
||||||
reason += f" {ban.reason}"
|
reason += f" {ban.reason}"
|
||||||
|
|
||||||
if any([x.reason==4 for x in bans]):
|
|
||||||
v.ban(days=30, reason="Digitally malicious content is not allowed.")
|
|
||||||
return {"error": reason}, 401
|
return {"error": reason}, 401
|
||||||
|
|
||||||
if len(bio_html) > 10000: abort(400)
|
if len(bio_html) > 10000: abort(400)
|
||||||
|
|
|
@ -572,7 +572,7 @@ def u_username_comments(username, v=None):
|
||||||
elif sort == "old":
|
elif sort == "old":
|
||||||
comments = comments.order_by(Comment.created_utc.asc())
|
comments = comments.order_by(Comment.created_utc.asc())
|
||||||
elif sort == "controversial":
|
elif sort == "controversial":
|
||||||
comments = comments.order_by(-1 * Comment.upvotes * Comment.downvotes)
|
comments = comments.order_by(-1 * Comment.upvotes * Comment.downvotes * Comment.downvotes)
|
||||||
elif sort == "top":
|
elif sort == "top":
|
||||||
comments = comments.order_by(Comment.downvotes - Comment.upvotes)
|
comments = comments.order_by(Comment.downvotes - Comment.upvotes)
|
||||||
elif sort == "bottom":
|
elif sort == "bottom":
|
||||||
|
|
|
@ -63,7 +63,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="toast" id="toast-post-error" style="position: fixed; bottom: 1.5rem; margin: 0 auto; left: 0; right: 0; width: 275px; z-index: 1000" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
|
<div class="toast" id="toast-post-error" style="position: fixed; bottom: 1.5rem; margin: 0 auto; left: 0; right: 0; width: 275px; z-index: 1000" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
|
||||||
<div class="toast-body bg-danger text-center text-white">
|
<div class="toast-body bg-danger text-center text-white">
|
||||||
<i class="fas fa-exclamation-circle mr-2"></i><span id="toast-post-error-text"></span>
|
<i class="fas fa-exclamation-circle mr-2"></i><span id="toast-post-error-text">Error, please try again later.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="toast" id="toast-post-error" style="position: fixed; bottom: 1.5rem; margin: 0 auto; left: 0; right: 0; width: 275px; z-index: 1000" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
|
<div class="toast" id="toast-post-error" style="position: fixed; bottom: 1.5rem; margin: 0 auto; left: 0; right: 0; width: 275px; z-index: 1000" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
|
||||||
<div class="toast-body bg-danger text-center text-white">
|
<div class="toast-body bg-danger text-center text-white">
|
||||||
<i class="fas fa-exclamation-circle mr-2"></i><span id="toast-post-error-text"></span>
|
<i class="fas fa-exclamation-circle mr-2"></i><span id="toast-post-error-text">Error, please try again later.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
{% block pagetitle %}Changelog{% endblock %}
|
{% block pagetitle %}Changelog{% endblock %}
|
||||||
|
|
||||||
{% block desktopBanner %}
|
{% block desktopBanner %}
|
||||||
<script src="/assets/js/changelog.js?v=53"></script>
|
<script src="/assets/js/changelog.js?v=54"></script>
|
||||||
|
|
||||||
<div class="row" style="overflow: visible;padding-top:5px;">
|
<div class="row" style="overflow: visible;padding-top:5px;">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
{% if v %}
|
{% if v %}
|
||||||
{% include "award_modal.html" %}
|
{% include "award_modal.html" %}
|
||||||
<script src="/assets/js/comments_v.js?v=53"></script>
|
<script src="/assets/js/comments_v.js?v=54"></script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/clipboard@2.0.8/dist/clipboard.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/clipboard@2.0.8/dist/clipboard.min.js"></script>
|
||||||
|
@ -593,17 +593,6 @@
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
<div class="toast" id="toast-comment-success" style="position: fixed; bottom: 1.5rem; margin: 0 auto; left: 0; right: 0; width: 275px; z-index: 1000" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
|
|
||||||
<div class="toast-body bg-success text-center text-white">
|
|
||||||
<i class="fas fa-comment-alt-smile mr-2"></i>Comment posted!
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="toast" id="toast-comment-error" style="position: fixed; bottom: 1.5rem; margin: 0 auto; left: 0; right: 0; width: 275px; z-index: 1000" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
|
|
||||||
<div class="toast-body bg-danger text-center text-white">
|
|
||||||
<i class="fas fa-exclamation-circle mr-2"></i><span id="comment-error-text"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% if v %}
|
{% if v %}
|
||||||
{% include "gif_modal.html" %}
|
{% include "gif_modal.html" %}
|
||||||
{% include "emoji_modal.html" %}
|
{% include "emoji_modal.html" %}
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
|
|
||||||
{% if v %}
|
{% if v %}
|
||||||
<script>function formkey() {return '{{v.formkey}}';}</script>
|
<script>function formkey() {return '{{v.formkey}}';}</script>
|
||||||
<script src="/assets/js/default.js?v=53"></script>
|
<script src="/assets/js/default.js?v=54"></script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
@ -343,7 +343,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="toast" id="toast-post-error" style="position: fixed; bottom: 1.5rem; margin: 0 auto; left: 0; right: 0; width: 275px; z-index: 1000" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
|
<div class="toast" id="toast-post-error" style="position: fixed; bottom: 1.5rem; margin: 0 auto; left: 0; right: 0; width: 275px; z-index: 1000" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
|
||||||
<div class="toast-body bg-danger text-center text-white">
|
<div class="toast-body bg-danger text-center text-white">
|
||||||
<i class="fas fa-exclamation-circle mr-2"></i><span id="toast-post-error-text"></span>
|
<i class="fas fa-exclamation-circle mr-2"></i><span id="toast-post-error-text">Error, please try again later.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -259,7 +259,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="toast" id="toast-post-error" style="position: fixed; bottom: 1.5rem; margin: 0 auto; left: 0; right: 0; width: 275px; z-index: 1000" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
|
<div class="toast" id="toast-post-error" style="position: fixed; bottom: 1.5rem; margin: 0 auto; left: 0; right: 0; width: 275px; z-index: 1000" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
|
||||||
<div class="toast-body bg-danger text-center text-white">
|
<div class="toast-body bg-danger text-center text-white">
|
||||||
<i class="fas fa-exclamation-circle mr-2"></i><span id="toast-post-error-text"></span>
|
<i class="fas fa-exclamation-circle mr-2"></i><span id="toast-post-error-text">Error, please try again later.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -147,7 +147,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="toast" id="toast-post-error" style="position: fixed; bottom: 1.5rem; margin: 0 auto; left: 0; right: 0; width: 275px; z-index: 1000" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
|
<div class="toast" id="toast-post-error" style="position: fixed; bottom: 1.5rem; margin: 0 auto; left: 0; right: 0; width: 275px; z-index: 1000" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
|
||||||
<div class="toast-body bg-danger text-center text-white">
|
<div class="toast-body bg-danger text-center text-white">
|
||||||
<i class="fas fa-exclamation-circle mr-2"></i><span id="toast-post-error-text"></span>
|
<i class="fas fa-exclamation-circle mr-2"></i><span id="toast-post-error-text">Error, please try again later.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{% if v %}
|
{% if v %}
|
||||||
<script src="/assets/js/comments_v.js?v=53"></script>
|
<script src="/assets/js/comments_v.js?v=54"></script>
|
||||||
{% include "award_modal.html" %}
|
{% include "award_modal.html" %}
|
||||||
{% include "emoji_modal.html" %}
|
{% include "emoji_modal.html" %}
|
||||||
{% include "gif_modal.html" %}
|
{% include "gif_modal.html" %}
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script src="/assets/js/userpage.js?v=53"></script>
|
<script src="/assets/js/userpage.js?v=54"></script>
|
||||||
<title>{{u.username}}'s profile - {{'SITE_NAME' | app_config}}</title>
|
<title>{{u.username}}'s profile - {{'SITE_NAME' | app_config}}</title>
|
||||||
{% if u.is_private %}
|
{% if u.is_private %}
|
||||||
<meta name="robots" content="noindex">
|
<meta name="robots" content="noindex">
|
||||||
|
|
Loading…
Reference in New Issue