misc
BIN
files/assets/images/emojis/marchipmunk.webp
Normal file
After Width: | Height: | Size: 9.5 KiB |
BIN
files/assets/images/emojis/marchipmunklove.webp
Normal file
After Width: | Height: | Size: 9.3 KiB |
BIN
files/assets/images/emojis/marseyantiwork.webp
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
files/assets/images/emojis/marseyban.webp
Normal file
After Width: | Height: | Size: 8.5 KiB |
BIN
files/assets/images/emojis/marseybased.webp
Normal file
After Width: | Height: | Size: 140 KiB |
BIN
files/assets/images/emojis/marseycarppat.webp
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
files/assets/images/emojis/marseycheerup.webp
Normal file
After Width: | Height: | Size: 81 KiB |
BIN
files/assets/images/emojis/marseydawnbreaker.webp
Normal file
After Width: | Height: | Size: 8.8 KiB |
BIN
files/assets/images/emojis/marseydrama.webp
Normal file
After Width: | Height: | Size: 8.2 KiB |
BIN
files/assets/images/emojis/marseyfry.webp
Normal file
After Width: | Height: | Size: 9.1 KiB |
BIN
files/assets/images/emojis/marseyfurry.webp
Normal file
After Width: | Height: | Size: 7.9 KiB |
BIN
files/assets/images/emojis/marseygiveup.webp
Normal file
After Width: | Height: | Size: 94 KiB |
BIN
files/assets/images/emojis/marseygroomer.webp
Normal file
After Width: | Height: | Size: 8.3 KiB |
BIN
files/assets/images/emojis/marseyhorseshoe.webp
Normal file
After Width: | Height: | Size: 9.3 KiB |
BIN
files/assets/images/emojis/marseykitty.webp
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
files/assets/images/emojis/marseymalding.webp
Normal file
After Width: | Height: | Size: 9.2 KiB |
BIN
files/assets/images/emojis/marseymini.webp
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
files/assets/images/emojis/marseyminigun.webp
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
files/assets/images/emojis/marseyplush.webp
Normal file
After Width: | Height: | Size: 11 KiB |
0
files/assets/images/emojis/marseypop.webp
Executable file → Normal file
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB |
BIN
files/assets/images/emojis/marseypop2.webp
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
files/assets/images/emojis/marseypunching.webp
Executable file → Normal file
Before Width: | Height: | Size: 203 KiB After Width: | Height: | Size: 140 KiB |
BIN
files/assets/images/emojis/marseysalutenavy.webp
Normal file
After Width: | Height: | Size: 7.2 KiB |
BIN
files/assets/images/emojis/marseysheepdog.webp
Normal file
After Width: | Height: | Size: 9.7 KiB |
BIN
files/assets/images/emojis/marseyteruteru.webp
Normal file
After Width: | Height: | Size: 7.9 KiB |
BIN
files/assets/images/emojis/marseytunaktunak.webp
Normal file
After Width: | Height: | Size: 83 KiB |
BIN
files/assets/images/emojis/marseywallst.webp
Normal file
After Width: | Height: | Size: 7.4 KiB |
BIN
files/assets/images/emojis/marseyyass.webp
Normal file
After Width: | Height: | Size: 9.6 KiB |
BIN
files/assets/images/emojis/marseyza.webp
Normal file
After Width: | Height: | Size: 7.3 KiB |
BIN
files/assets/images/emojis/marsheen.webp
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
files/assets/images/emojis/marsheep.webp
Normal file
After Width: | Height: | Size: 8.6 KiB |
BIN
files/assets/images/emojis/marsheepnpc.webp
Normal file
After Width: | Height: | Size: 8.2 KiB |
BIN
files/assets/images/emojis/seethejak.webp
Normal file
After Width: | Height: | Size: 6.9 KiB |
|
@ -134,7 +134,7 @@ post_reply=function(id){
|
|||
xhr.onload=function(){
|
||||
if (xhr.status==200) {
|
||||
commentForm=document.getElementById('comment-form-space-'+id);
|
||||
commentForm.innerHTML = xhr.response.replace(/data-src/g, 'src');
|
||||
commentForm.innerHTML = xhr.response.replace(/data-src/g, 'src').replace(/data-cfsrc/g, 'src').replace(/style="display:none;visibility:hidden;"/g, '');
|
||||
}
|
||||
else {
|
||||
var myToast = new bootstrap.Toast(document.getElementById('toast-post-success'));
|
||||
|
@ -160,7 +160,7 @@ comment_edit=function(id){
|
|||
xhr.onload=function(){
|
||||
if (xhr.status==200) {
|
||||
commentForm=document.getElementById('comment-text-'+id);
|
||||
commentForm.innerHTML = xhr.response.replace(/data-src/g, 'src');
|
||||
commentForm.innerHTML = xhr.response.replace(/data-src/g, 'src').replace(/data-cfsrc/g, 'src').replace(/style="display:none;visibility:hidden;"/g, '');
|
||||
document.getElementById('cancel-edit-'+id).click()
|
||||
}
|
||||
else {
|
||||
|
@ -191,7 +191,7 @@ post_comment=function(fullname){
|
|||
xhr.onload=function(){
|
||||
if (xhr.status==200) {
|
||||
commentForm=document.getElementById('comment-form-space-'+fullname);
|
||||
commentForm.innerHTML = xhr.response.replace(/data-src/g, 'src').replace(/style="display:none;visibility:hidden;"/g, '');
|
||||
commentForm.innerHTML = xhr.response.replace(/data-src/g, 'src').replace(/data-cfsrc/g, 'src').replace(/style="display:none;visibility:hidden;"/g, '');
|
||||
}
|
||||
else {
|
||||
var myToast = new bootstrap.Toast(document.getElementById('toast-post-success'));
|
||||
|
|
|
@ -355,7 +355,7 @@ class Comment(Base):
|
|||
|
||||
if not v: return False
|
||||
|
||||
if v.filter_words and any([x in self.body for x in v.filter_words]): return True
|
||||
if v.filter_words and self.body and any([x in self.body for x in v.filter_words]): return True
|
||||
|
||||
if self.is_banned or (self.author and self.author.shadowbanned): return True
|
||||
|
||||
|
|
|
@ -5,6 +5,10 @@ SITE = environ.get("DOMAIN", '').strip()
|
|||
SITE_NAME = environ.get("SITE_NAME", '').strip()
|
||||
|
||||
SLURS = {
|
||||
"retarded": "r-slurred",
|
||||
"retard": "r-slur",
|
||||
"tard": "r-slur",
|
||||
"faggot": "cute twink",
|
||||
"faggot": "cute twink",
|
||||
"fag": "cute twink",
|
||||
"pedophile": "libertarian",
|
||||
|
|
|
@ -47,6 +47,7 @@ def shop(v):
|
|||
"description": "Makes flies swarm a post.",
|
||||
"icon": "fas fa-poop",
|
||||
"color": "text-black-50",
|
||||
"owned": 0,
|
||||
"price": 500
|
||||
},
|
||||
"fireflies": {
|
||||
|
@ -55,6 +56,7 @@ def shop(v):
|
|||
"description": "Puts fireflies on the post.",
|
||||
"icon": "fas fa-sparkles",
|
||||
"color": "text-warning",
|
||||
"owned": 0,
|
||||
"price": 500
|
||||
},
|
||||
"train": {
|
||||
|
@ -63,6 +65,7 @@ def shop(v):
|
|||
"description": "Summons a train on the post.",
|
||||
"icon": "fas fa-train",
|
||||
"color": "text-pink",
|
||||
"owned": 0,
|
||||
"price": 500
|
||||
},
|
||||
"pin": {
|
||||
|
@ -71,6 +74,7 @@ def shop(v):
|
|||
"description": "Pins the post.",
|
||||
"icon": "fas fa-thumbtack fa-rotate--45",
|
||||
"color": "text-warning",
|
||||
"owned": 0,
|
||||
"price": 750
|
||||
},
|
||||
"unpin": {
|
||||
|
@ -79,6 +83,7 @@ def shop(v):
|
|||
"description": "Removes 1 hour from the pin duration of the post.",
|
||||
"icon": "fas fa-thumbtack fa-rotate--45",
|
||||
"color": "text-black",
|
||||
"owned": 0,
|
||||
"price": 1000
|
||||
},
|
||||
"flairlock": {
|
||||
|
@ -87,6 +92,7 @@ def shop(v):
|
|||
"description": "Sets a flair for the author and locks it or 24 hours.",
|
||||
"icon": "fas fa-lock",
|
||||
"color": "text-black",
|
||||
"owned": 0,
|
||||
"price": 1250
|
||||
},
|
||||
"agendaposter": {
|
||||
|
@ -95,6 +101,7 @@ def shop(v):
|
|||
"description": "Forces the agendaposter theme on the author for 24 hours.",
|
||||
"icon": "fas fa-snooze",
|
||||
"color": "text-purple",
|
||||
"owned": 0,
|
||||
"price": 2000
|
||||
},
|
||||
"ban": {
|
||||
|
@ -103,6 +110,7 @@ def shop(v):
|
|||
"description": "Bans the author for a day.",
|
||||
"icon": "fas fa-gavel",
|
||||
"color": "text-danger",
|
||||
"owned": 0,
|
||||
"price": 3000
|
||||
},
|
||||
"unban": {
|
||||
|
@ -111,6 +119,7 @@ def shop(v):
|
|||
"description": "Removes 1 day from the ban duration of the recipient.",
|
||||
"icon": "fas fa-gavel",
|
||||
"color": "text-success",
|
||||
"owned": 0,
|
||||
"price": 3500
|
||||
},
|
||||
"grass": {
|
||||
|
@ -119,6 +128,7 @@ def shop(v):
|
|||
"description": "Ban the author permanently (must provide a timestamped picture of them touching grass to the admins to get unbanned)",
|
||||
"icon": "fas fa-seedling",
|
||||
"color": "text-success",
|
||||
"owned": 0,
|
||||
"price": 10000
|
||||
},
|
||||
}
|
||||
|
@ -130,6 +140,7 @@ def shop(v):
|
|||
"description": "Makes flies swarm a post.",
|
||||
"icon": "fas fa-poop",
|
||||
"color": "text-black-50",
|
||||
"owned": 0,
|
||||
"price": 500
|
||||
},
|
||||
"fireflies": {
|
||||
|
@ -138,6 +149,7 @@ def shop(v):
|
|||
"description": "Puts fireflies on the post.",
|
||||
"icon": "fas fa-sparkles",
|
||||
"color": "text-warning",
|
||||
"owned": 0,
|
||||
"price": 500
|
||||
},
|
||||
"train": {
|
||||
|
@ -146,6 +158,7 @@ def shop(v):
|
|||
"description": "Summons a train on the post.",
|
||||
"icon": "fas fa-train",
|
||||
"color": "text-pink",
|
||||
"owned": 0,
|
||||
"price": 50
|
||||
},
|
||||
"pin": {
|
||||
|
@ -154,6 +167,7 @@ def shop(v):
|
|||
"description": "Pins the post.",
|
||||
"icon": "fas fa-thumbtack fa-rotate--45",
|
||||
"color": "text-warning",
|
||||
"owned": 0,
|
||||
"price": 750
|
||||
},
|
||||
"unpin": {
|
||||
|
@ -162,27 +176,13 @@ def shop(v):
|
|||
"description": "Removes 1 hour from the pin duration of the post.",
|
||||
"icon": "fas fa-thumbtack fa-rotate--45",
|
||||
"color": "text-black",
|
||||
"owned": 0,
|
||||
"price": 1000
|
||||
},
|
||||
}
|
||||
|
||||
query = g.db.query(
|
||||
User.id, User.username, User.patron, User.namecolor,
|
||||
AwardRelationship.kind.label('last_award_kind'), func.count(AwardRelationship.id).label('last_award_count')
|
||||
).filter(AwardRelationship.submission_id==None, AwardRelationship.comment_id==None, User.patron > 0) \
|
||||
.group_by(User.username, User.patron, User.id, User.namecolor, AwardRelationship.kind) \
|
||||
.order_by(User.patron.desc(), AwardRelationship.kind.desc()) \
|
||||
.join(User).filter(User.id == v.id).all()
|
||||
for useraward in g.db.query(AwardRelationship).filter(AwardRelationship.user_id == v.id, AwardRelationship.submission_id == None, AwardRelationship.comment_id == None).all(): AWARDS[useraward.kind]["owned"] += 1
|
||||
|
||||
owned = []
|
||||
for row in (r._asdict() for r in query):
|
||||
kind = row['last_award_kind']
|
||||
if kind in AWARDS.keys():
|
||||
award = AWARDS[kind]
|
||||
award["owned_num"] = row['last_award_count']
|
||||
owned.append(award)
|
||||
|
||||
owned = sorted(owned, key=lambda x: x['price'])
|
||||
if v.patron:
|
||||
for val in AWARDS.values():
|
||||
if v.patron == 1: val["price"] = int(val["price"]*0.90)
|
||||
|
@ -192,7 +192,7 @@ def shop(v):
|
|||
else: val["price"] = int(val["price"]*0.70)
|
||||
|
||||
sales = g.db.query(Vote.id).count() + g.db.query(CommentVote.id).count() - g.db.query(func.sum(User.coins)).scalar()
|
||||
return render_template("shop.html", owned=owned, awards=list(AWARDS.values()), v=v, sales=sales)
|
||||
return render_template("shop.html", awards=list(AWARDS.values()), v=v, sales=sales)
|
||||
|
||||
|
||||
@app.post("/buy/<award>")
|
||||
|
|
|
@ -603,40 +603,41 @@ def edit_comment(cid, v):
|
|||
body=body,
|
||||
v=v
|
||||
)
|
||||
now = int(time.time())
|
||||
cutoff = now - 60 * 60 * 24
|
||||
if not body.lower().contains('trans lives matters'):
|
||||
now = int(time.time())
|
||||
cutoff = now - 60 * 60 * 24
|
||||
|
||||
similar_comments = g.db.query(Comment
|
||||
).options(
|
||||
lazyload('*')
|
||||
).filter(
|
||||
Comment.author_id == v.id,
|
||||
Comment.body.op(
|
||||
'<->')(body) < app.config["SPAM_SIMILARITY_THRESHOLD"],
|
||||
Comment.created_utc > cutoff
|
||||
).all()
|
||||
similar_comments = g.db.query(Comment
|
||||
).options(
|
||||
lazyload('*')
|
||||
).filter(
|
||||
Comment.author_id == v.id,
|
||||
Comment.body.op(
|
||||
'<->')(body) < app.config["SPAM_SIMILARITY_THRESHOLD"],
|
||||
Comment.created_utc > cutoff
|
||||
).all()
|
||||
|
||||
threshold = app.config["SPAM_SIMILAR_COUNT_THRESHOLD"]
|
||||
if v.age >= (60 * 60 * 24 * 30):
|
||||
threshold *= 4
|
||||
elif v.age >= (60 * 60 * 24 * 7):
|
||||
threshold *= 3
|
||||
elif v.age >= (60 * 60 * 24):
|
||||
threshold *= 2
|
||||
threshold = app.config["SPAM_SIMILAR_COUNT_THRESHOLD"]
|
||||
if v.age >= (60 * 60 * 24 * 30):
|
||||
threshold *= 4
|
||||
elif v.age >= (60 * 60 * 24 * 7):
|
||||
threshold *= 3
|
||||
elif v.age >= (60 * 60 * 24):
|
||||
threshold *= 2
|
||||
|
||||
if len(similar_comments) > threshold:
|
||||
text = "Your account has been suspended for 1 day for the following reason:\n\n> Too much spam!"
|
||||
send_notification(NOTIFICATIONS_ACCOUNT, v, text)
|
||||
if len(similar_comments) > threshold:
|
||||
text = "Your account has been suspended for 1 day for the following reason:\n\n> Too much spam!"
|
||||
send_notification(NOTIFICATIONS_ACCOUNT, v, text)
|
||||
|
||||
v.ban(reason="Spamming.",
|
||||
days=1)
|
||||
v.ban(reason="Spamming.",
|
||||
days=1)
|
||||
|
||||
for comment in similar_comments:
|
||||
comment.is_banned = True
|
||||
comment.ban_reason = "Automatic spam removal. This happened because the post's creator submitted too much similar content too quickly."
|
||||
g.db.add(comment)
|
||||
for comment in similar_comments:
|
||||
comment.is_banned = True
|
||||
comment.ban_reason = "Automatic spam removal. This happened because the post's creator submitted too much similar content too quickly."
|
||||
g.db.add(comment)
|
||||
|
||||
return {"error": "Too much spam!"}, 403
|
||||
return {"error": "Too much spam!"}, 403
|
||||
|
||||
if request.files.get("file") and request.headers.get("cf-ipcountry") != "T1":
|
||||
file=request.files["file"]
|
||||
|
|
|
@ -230,8 +230,7 @@ def message2(v, username):
|
|||
user = get_user(username, v=v)
|
||||
if hasattr(user, 'is_blocking') and user.is_blocking: return {"error": "You're blocking this user."}, 403
|
||||
|
||||
if v.admin_level <= 1:
|
||||
if hasattr(user, 'is_blocked') and user.is_blocked: return {"error": "This user is blocking you."}, 403
|
||||
if v.admin_level <= 1 and hasattr(user, 'is_blocked') and user.is_blocked: return {"error": "This user is blocking you."}, 403
|
||||
|
||||
message = request.values.get("message", "").strip()[:1000].strip()
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
{% if v %}
|
||||
{% include "award_modal.html" %}
|
||||
<script src="/assets/js/comments_v.js?v=62"></script>
|
||||
<script src="/assets/js/comments_v.js?v=63"></script>
|
||||
{% endif %}
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/clipboard@2.0.8/dist/clipboard.min.js"></script>
|
||||
|
@ -162,7 +162,7 @@
|
|||
{% set replies=c.replies %}
|
||||
{% endif %}
|
||||
|
||||
{% if (c.is_banned or c.deleted_utc > 0 or c.is_blocking or c.is_blocked) and not (v and v.admin_level>0) and not (v and v.id==c.author_id) %}
|
||||
{% if (c.is_banned or c.deleted_utc > 0 or c.is_blocking) and not (v and v.admin_level>0) and not (v and v.id==c.author_id) %}
|
||||
|
||||
<div id="comment-{{c.id}}" class="comment">
|
||||
|
||||
|
@ -176,7 +176,7 @@
|
|||
<div class="user-info">
|
||||
<span class="comment-collapse d-md-none" onclick="collapse_comment('{{c.id}}')"></span>
|
||||
{% if standalone and c.over_18 %}<span class="badge badge-danger">+18</span> {% endif %}
|
||||
[{% if c.is_banned %}Removed by admins{% elif c.deleted_utc > 0 %}Deleted by author{% elif c.is_blocking %}You are blocking @{{c.author.username}}{% elif c.is_blocked %}This user has blocked you{% endif %}]
|
||||
[{% if c.is_banned %}Removed by admins{% elif c.deleted_utc > 0 %}Deleted by author{% elif c.is_blocking %}You are blocking @{{c.author.username}}{% endif %}]
|
||||
</div>
|
||||
|
||||
|
||||
|
@ -278,7 +278,7 @@
|
|||
{% if c.is_blocking %}<i class="fas fa-user-minus text-warning" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{% if v and v.admin_level >= 2 %}You're blocking this user, but you can see this comment because {{'it\'s pinned' if c.is_pinned else 'you\'re an admin'}}.{% else %}Comment author is banned{% endif %}"></i>{% endif %}
|
||||
{% if c.is_blocked %}<i class="fas fa-user-minus text-danger" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="This user is blocking you, but you can see this comment because {{'it\'s pinned' if c.is_pinned else 'you\'re an admin'}}."></i>{% endif %}
|
||||
|
||||
{% if c.author.verified %}<i class="fas fa-badge-check align-middle ml-1" style="color:{% if c.author.id == 541 %}#62ca56{% elif c.author.id == 2256 %}#ff0000{% else %}#1DA1F2{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{c.author.verified}}"></i>
|
||||
{% if c.author.verified %}<i class="fas fa-badge-check align-middle ml-1" style="color:{% if c.author.id == 541 %}#62ca56{% elif c.author.id in [30,2256] %}#ff0000{% else %}#1DA1F2{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{c.author.verified}}"></i>
|
||||
{% endif %}
|
||||
|
||||
<a class="user-name text-decoration-none" data-bs-position="auto" data-bs-toggle="popover" data-bs-trigger="focus" data-content-id="popover-{{c.id}}" href="javascript:void(0)" tabindex="0" style="color:#{{c.author.namecolor}}; font-size:12px; font-weight:bold;"><img loading="lazy" src="{{c.author.profile_url}}" class="profile-pic-25 mr-2"/><span {% if c.author.patron and not c.distinguish_level %}class="patron" style="background-color:#{{c.author.namecolor}};"{% elif c.distinguish_level and 'rama' in request.host %}class="mod"{% endif %}>{{c.author.username}}</span></a>
|
||||
|
|
|
@ -270,7 +270,7 @@
|
|||
|
||||
</head>
|
||||
|
||||
<body id="{% if request.path != '/comments' %}{% block pagetype %}frontpage{% endblock %}{% endif %}" style="overflow-x: hidden; {% if v and v.background %} background:url(/assets/images/backgrounds/{{v.background}}) no-repeat center center fixed !important; background-size: cover!important; background-color: #000!important;{% endif %} {% if 'rama' in request.host %}margin-top: 29px!important;{% endif %}">
|
||||
<body id="{% if request.path != '/comments' %}{% block pagetype %}frontpage{% endblock %}{% endif %}" style="{% if path != '/formatting' %}overflow-x: hidden; {% endif %}{% if v and v.background %} background:url(/assets/images/backgrounds/{{v.background}}) no-repeat center center fixed !important; background-size: cover!important; background-color: #000!important;{% endif %} {% if 'rama' in request.host %}margin-top: 29px!important;{% endif %}">
|
||||
|
||||
{% block Banner %}
|
||||
{% if '@' not in request.path %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<script src="/assets/js/emoji_modal.js?v=56"></script>
|
||||
<script src="/assets/js/emoji_modal.js?v=57"></script>
|
||||
|
||||
<style>
|
||||
a.emojitab {
|
||||
|
|
|
@ -13,6 +13,9 @@
|
|||
|
||||
On {{'SITE_NAME' | app_config}}, you can use Markdown formatting.
|
||||
|
||||
<pre>
|
||||
|
||||
</pre>
|
||||
|
||||
<h2>Inline formatting</h2>
|
||||
|
||||
|
@ -456,7 +459,7 @@ line breaks
|
|||
</tbody>
|
||||
</table>
|
||||
|
||||
Allowed styles:
|
||||
<h2>Allowed Styles</h2>
|
||||
|
||||
<table class="table table-striped mb-5">
|
||||
<thead class="bg-primary text-white">
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
<a {% if v %}href="/"{% else %}href="/logged_out"{% endif %} class="navbar-brand mr-auto">
|
||||
<img loading="lazy" height="30" src="/assets/images/{{'SITE_NAME' | app_config}}/headericon.gif">
|
||||
{% if "gigachadlife" in request.host %}
|
||||
<span style="font-weight: bold; font-size: 20px;">GigaChadLife</span>
|
||||
<span style="font-weight: bold; font-size: 1.2rem;">GigaChadLife</span>
|
||||
{% else %}
|
||||
<img loading="lazy" src="/assets/images/{{'SITE_NAME' | app_config}}/logo.gif" height="20">
|
||||
{% endif %}
|
||||
|
|
|
@ -129,7 +129,7 @@
|
|||
|
||||
<div class="modal fade" id="blockmodal" tabindex="-1" role="dialog" aria-labelledby="blockmodal" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<form action="/settings/block" id="exile-form" method="post" onsubmit="return false;">
|
||||
<form class="m-auto" action="/settings/block" id="exile-form" method="post" onsubmit="return false;">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Block users</h5>
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
<header class="text-center">
|
||||
<img src="/assets/images/shop.gif" width="50%">
|
||||
<h3 class="mt-4">Stir drama. Earn coins.</h3>
|
||||
<h5 class="mt-4">Total sales: {{sales}} dramacoins</h3>
|
||||
<h5 class="mt-4">Total sales: {{sales}} coins</h3>
|
||||
</header>
|
||||
{% endblock %}
|
||||
|
||||
|
@ -38,59 +38,35 @@
|
|||
</div>
|
||||
{% endif %}
|
||||
|
||||
<pre></pre>
|
||||
<pre></pre>
|
||||
<h5>Owned Awards</h5>
|
||||
|
||||
<table class="table table-striped">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th scope="col">Icon</th>
|
||||
<th scope="col">Title</th>
|
||||
<th scope="col">Description</th>
|
||||
<th scope="col">Owned</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for a in owned %}
|
||||
<tr>
|
||||
<td><i class="{{a['icon']}} {{a['color']}}" style="font-size: 30px"></i></td>
|
||||
<td style="font-weight: bold">{{a['title']}}</td>
|
||||
<td style="font-weight: bold">{{a['description']}}</td>
|
||||
<td style="font-weight: bold">{{a['owned_num']}}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
<pre>
|
||||
|
||||
|
||||
</pre>
|
||||
|
||||
<h5>Shop</h5>
|
||||
|
||||
<table class="table table-striped">
|
||||
<thead class="bg-primary text-white">
|
||||
<table class="table table-striped shop">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th scope="col">Icon</th>
|
||||
<th scope="col">Title</th>
|
||||
<th scope="col">Price</th>
|
||||
<th scope="col">Owned</th>
|
||||
<th scope="col">Buy</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for a in awards %}
|
||||
<tr>
|
||||
<th scope="col">Icon</th>
|
||||
<th scope="col">Title</th>
|
||||
<th scope="col">Price</th>
|
||||
<th scope="col">Buy</th>
|
||||
<td><i class="{{a['icon']}} {{a['color']}}" style="font-size: 30px"></i></td>
|
||||
<td style="font-weight: bold">{{a['title']}}</td>
|
||||
<td style="font-weight: bold">{{a['price']}}</td>
|
||||
<td style="font-weight: bold">{{a['owned']}}</td>
|
||||
{% set kind = a['kind'] %}
|
||||
<td style="font-weight: bold">
|
||||
<a class="d-flex btn btn-success {% if v.coins < a['price'] %}disabled{% endif %}" href="javascript:void(0)" onclick="post_toast('/buy/{{kind}}')"><span class="m-auto">Buy</span></a>
|
||||
{% if v.procoins and kind not in ["agendaposter","grass"] %}<a class="d-flex marseybux btn btn-success {% if v.procoins < a['price'] %}disabled{% endif %}" href="javascript:void(0)" onclick="post_toast('/buy/{{kind}}?mb=true')"><span class="m-auto">Buy with Marseybux</span></a>{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for a in awards %}
|
||||
<tr>
|
||||
<td><i class="{{a['icon']}} {{a['color']}}" style="font-size: 30px"></i></td>
|
||||
<td style="font-weight: bold">{{a['title']}}</td>
|
||||
<td style="font-weight: bold">{{a['price']}}</td>
|
||||
{% set kind = a['kind'] %}
|
||||
<td style="font-weight: bold">
|
||||
<a class="btn btn-success {% if v.coins < a['price'] %}disabled{% endif %}" href="javascript:void(0)" onclick="post_toast('/buy/{{kind}}')">Buy</a>
|
||||
{% if v.procoins and kind not in ["agendaposter","grass"] %}<a class="btn btn-success {% if v.procoins < a['price'] %}disabled{% endif %}" href="javascript:void(0)" onclick="post_toast('/buy/{{kind}}?mb=true')">Buy with Marseybux</a>{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</table>
|
||||
<pre>
|
||||
|
||||
|
@ -99,4 +75,21 @@
|
|||
|
||||
|
||||
</pre>
|
||||
|
||||
<style>
|
||||
@media (max-width: 768px) {
|
||||
.table th {
|
||||
padding-left: 0.3rem !important;
|
||||
padding-right: 0.3rem !important;
|
||||
}
|
||||
.table td {
|
||||
padding-left: 0.3rem !important;
|
||||
padding-right: 0.3rem !important;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.marseybux {
|
||||
font-size: 0.7rem !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
{% endblock %}
|
||||
|
|
|
@ -143,7 +143,7 @@
|
|||
</script>
|
||||
|
||||
{% if v %}
|
||||
<script src="/assets/js/comments_v.js?v=62"></script>
|
||||
<script src="/assets/js/comments_v.js?v=63"></script>
|
||||
{% include "award_modal.html" %}
|
||||
{% include "emoji_modal.html" %}
|
||||
{% include "gif_modal.html" %}
|
||||
|
@ -226,7 +226,7 @@
|
|||
<meta property="article:published_time" content="{{p.created_datetime}}" />
|
||||
{% if p.edited_utc %}<meta property="article:modified_time" content="{{p.edited_string}}" />{% endif %}
|
||||
<meta property="og:description" name="description" content="{{p.plainbody(v)}}" />
|
||||
<meta property="og:author" name="author" content="{{'@'+p.author.username}}" />
|
||||
{% if p.author %}<meta property="og:author" name="author" content="{{'@'+p.author.username}}" />{% endif %}
|
||||
<meta property="og:title" content="{{p.plaintitle(v)}} - {{'SITE_NAME' | app_config}}" />
|
||||
<meta property="og:image" content="{% if p.is_image %}{{p.realurl(v)}}{% elif p.has_thumb%}{{p.thumb_url}}{% else %}{{'SITE_NAME' | app_config}}/assets/images/{{'SITE_NAME' | app_config}}/preview.gif{% endif %}" />
|
||||
{% if p.url and p.url.lower().endswith('.mp4') %}
|
||||
|
@ -238,7 +238,7 @@
|
|||
<meta name="twitter:card" content="summary_large_image"/>
|
||||
<meta name="twitter:site" content="{{request.host_url}}">
|
||||
<meta name="twitter:title" content="{{p.plaintitle(v)}} - {{'SITE_NAME' | app_config}}" />
|
||||
<meta name="twitter:creator" content="{{'@'+p.author.username}}">
|
||||
{% if p.author %}<meta name="twitter:creator" content="{{'@'+p.author.username}}">{% endif %}
|
||||
<meta name="twitter:description" content="{{p.plainbody(v)}}" />
|
||||
<meta name="twitter:image" content="{% if p.is_image %}{{p.realurl(v)}}{% elif p.has_thumb %}{{p.thumb_url}}{% else %}{{'SITE_NAME' | app_config}}/assets/images/{{'SITE_NAME' | app_config}}/preview.gif{% endif %}" />
|
||||
<meta name="twitter:url" content="{{p.permalink | full_link}}" />
|
||||
|
@ -424,7 +424,7 @@
|
|||
{% if p.over_18 %}<span class="badge badge-danger text-small-extra mr-1">+18</span>{% endif %}
|
||||
{% if p.private %}<span class="badge border-warning border-1 text-small-extra">Draft</span>{% endif %}
|
||||
{% if p.active_flags %}<a class="btn btn-primary" href="javascript:void(0)" style="padding:1px 5px; font-size:10px;" onclick="document.getElementById('flaggers').classList.toggle('d-none')">{{p.active_flags}} Reports</a>{% endif %}
|
||||
{% if p.author.verified %}<i class="fas fa-badge-check align-middle ml-1" style="color:{% if p.author.id == 541 %}#62ca56{% elif p.author.id == 2256 %}#ff0000{% else %}#1DA1F2{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{p.author.verified}}"></i>
|
||||
{% if p.author.verified %}<i class="fas fa-badge-check align-middle ml-1" style="color:{% if p.author.id == 541 %}#62ca56{% elif p.author.id in [30,2256] %}#ff0000{% else %}#1DA1F2{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{p.author.verified}}"></i>
|
||||
{% endif %}
|
||||
<a class="user-name text-decoration-none" data-bs-position="auto" data-bs-toggle="popover" data-bs-trigger="focus" data-content-id="popover-{{p.id}}" href="javascript:void(0)" tabindex="0" style="color: #{{p.author.namecolor}}; font-weight: bold;" class="user-name"><img loading="lazy" src="{{p.author.profile_url}}" class="profile-pic-25 mr-2"/><span {% if p.author.patron and not p.distinguish_level %}class="patron" style="background-color:#{{p.author.namecolor}};"{% elif p.distinguish_level and 'rama' in request.host %}class="mod"{% endif %}>{{p.author.username}}</span></a>{% if p.author.customtitle %} <bdi style="color: #{{p.author.titlecolor}}"> {% if p.author.quadrant %}<img loading="lazy" height="20" src="/assets/images/PCM/quadrants/{{p.author.quadrant}}.gif">{% endif %}{{p.author.customtitle | safe}}</bdi>{% endif %}
|
||||
<span data-bs-toggle="tooltip" data-bs-placement="bottom" id="timestamp"> {{p.age_string}}</span>
|
||||
|
|
|
@ -192,7 +192,7 @@
|
|||
{% if p.is_blocked %}<i class="fas fa-user-minus text-danger" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="This user is blocking you."></i>{% endif %}
|
||||
{% if p.private %}<span class="badge border-warning border-1 text-small-extra">Draft</span>{% endif %}
|
||||
{% if p.active_flags %}<a class="btn btn-primary" href="javascript:void(0)" style="padding:1px 5px; font-size:10px;" onclick="document.getElementById('flaggers-{{p.id}}').classList.toggle('d-none')">{{p.active_flags}} Reports</a>{% endif %}
|
||||
{% if p.author.verified %}<i class="fas fa-badge-check align-middle ml-1" style="color:{% if p.author.id == 541 %}#62ca56{% elif p.author.id == 2256 %}#ff0000{% else %}#1DA1F2{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{p.author.verified}}"></i>
|
||||
{% if p.author.verified %}<i class="fas fa-badge-check align-middle ml-1" style="color:{% if p.author.id == 541 %}#62ca56{% elif p.author.id in [30,2256] %}#ff0000{% else %}#1DA1F2{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{p.author.verified}}"></i>
|
||||
{% endif %}
|
||||
<a class="user-name text-decoration-none" data-bs-position="auto" data-bs-toggle="popover" data-bs-trigger="focus" data-content-id="popover-{{p.id}}" href="javascript:void(0)" tabindex="0" style="color: #{{p.author.namecolor}}; font-weight: bold;"><img loading="lazy" src="{{p.author.profile_url}}" class="profile-pic-25 mr-2"><span {% if p.author.patron and not p.distinguish_level %}class="patron" style="background-color:#{{p.author.namecolor}};"{% elif p.distinguish_level and 'rama' in request.host %}class="mod"{% endif %}>{{p.author.username}}</span></a>{% if p.author.customtitle %}<bdi style="color: #{{p.author.titlecolor}}"> {% if p.author.quadrant %}<img loading="lazy" height="20" src="/assets/images/PCM/quadrants/{{p.author.quadrant}}.gif">{% endif %}{{p.author.customtitle | safe}}</bdi>{% endif %}
|
||||
<span data-bs-toggle="tooltip" data-bs-placement="bottom" id="timestamp-{{p.id}}"> {{p.age_string}}</span>
|
||||
|
|
|
@ -87,7 +87,7 @@
|
|||
<i class="fad fa-user-tag text-info align-middle ml-2" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Original Username: @{{u.original_username}}"></i>
|
||||
</span>
|
||||
{% endif %}
|
||||
{% if u.verified %}<span><i class="fas fa-badge-check align-middle ml-1" style="color:{% if u.id == 541 %}#62ca56{% elif u.id == 2256 %}#ff0000{% else %}#1DA1F2{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{u.verified}}"></i></span>{% endif %}
|
||||
{% if u.verified %}<span><i class="fas fa-badge-check align-middle ml-1" style="color:{% if u.id == 541 %}#62ca56{% elif u.id in [30,2256] %}#ff0000{% else %}#1DA1F2{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{u.verified}}"></i></span>{% endif %}
|
||||
{% if u.admin_level > 1 or (u.admin_level == 1 and (not v or v.admin_level < 2)) %}
|
||||
<span>
|
||||
<i class="fas fa-broom text-admin align-middle ml-2" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Admin"></i>
|
||||
|
@ -368,7 +368,7 @@
|
|||
<h5 style="color:#ff66ac;">BANNED USER{% if u.ban_reason %}: {{u.ban_reason}}{% endif %}</h5>
|
||||
{% if u.unban_utc %}<h5 style="color:#ff66ac;">{{u.unban_string}}</h5>{% endif %}
|
||||
{% endif %}
|
||||
{% if u.verified %}<span><i class="fas fa-badge-check align-middle ml-1" style="color:{% if u.id == 541 %}#62ca56{% elif u.id == 2256 %}#ff0000{% else %}#1DA1F2{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{u.verified}}"></i></span> {% endif %}
|
||||
{% if u.verified %}<span><i class="fas fa-badge-check align-middle ml-1" style="color:{% if u.id == 541 %}#62ca56{% elif u.id in [30,2256] %}#ff0000{% else %}#1DA1F2{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{u.verified}}"></i></span> {% endif %}
|
||||
<a class="text-black"><h1 class="h5 d-inline-block" style="color: #{{u.namecolor}}"><span {% if u.patron %}class="patron" style="background-color:#{{u.namecolor}};"{% endif %}>{{u.username}}</span></h1></a>
|
||||
{% if u.username != u.original_username %}
|
||||
<span>
|
||||
|
|