Merge branch 'frost' into patch-8

master
Aevann1 2022-01-17 07:18:31 -08:00 committed by GitHub
commit 9544020aa0
51 changed files with 232 additions and 154 deletions

View File

@ -55,7 +55,7 @@ class Badge(Base):
@property
@lazy
def path(self):
return f"/static/assets/images/badges/{self.name.replace(' ','%20')}.webp?a=4"
return f"/static/assets/images/badges/{self.name.replace(' ','%20')}.webp?a=5"
@property
@lazy

View File

@ -68,7 +68,7 @@ class Submission(Base):
@property
@lazy
def comments(self):
return g.db.query(Comment.author_id, Comment.created_utc, Comment.id).filter_by(parent_submission=self.id)
return g.db.query(Comment.author_id, Comment.created_utc, Comment.id).filter(Submission.parent_submission == self.id, Submission.author_id.notin_((AUTOPOLLER_ID,AUTOBETTER_ID)))
@property
@lazy

View File

@ -433,10 +433,10 @@ class User(Base):
@property
@lazy
def profile_url(self):
if self.agendaposter: return f"https://{site}/static/assets/images/defaultpictures/agendaposter/{random.randint(1, 50)}.webp?a=202"
if self.agendaposter: return f"https://{site}/static/assets/images/defaultpictures/agendaposter/{random.randint(1, 50)}.webp?a=203"
if self.profileurl: return self.profileurl
if "rama" in site: return f"https://{site}/static/assets/images/defaultpictures/{random.randint(1, 150)}.webp?a=202"
return f"https://{site}/static/assets/images/default-profile-pic.webp?a=202"
return f"https://{site}/static/assets/images/default-profile-pic.webp?a=203"
@lazy
def json_popover(self, v):

View File

@ -141,7 +141,8 @@ if SITE == 'rdrama.net':
AUTOPOLLER_ID = 6176
AUTOBETTER_ID = 7668
TAX_RECEIVER_ID = 995
AUTO_UPVOTE_IDS = (2424,4245)
PIZZASHILL_ID = 2424
HIL_ID = 4245
CRAT_ID = 747
IDIO_ID = 30
CARP_ID = 995
@ -167,7 +168,8 @@ elif SITE == "pcmemes.net":
AUTOPOLLER_ID = 3369
AUTOBETTER_ID = 1867
TAX_RECEIVER_ID = 1592
AUTO_UPVOTE_IDS = ()
PIZZASHILL_ID = 0
HIL_ID = 0
CRAT_ID = 0
IDIO_ID = 0
CARP_ID = 0
@ -193,7 +195,8 @@ else:
AUTOPOLLER_ID = 6
AUTOBETTER_ID = 7
TAX_RECEIVER_ID = 8
AUTO_UPVOTE_IDS = ()
PIZZASHILL_ID = 0
HIL_ID = 0
CRAT_ID = 0
IDIO_ID = 0
CARP_ID = 0

View File

@ -109,7 +109,7 @@ def sanitize(sanitized, noimages=False, alert=False, comment=False):
for i in re.finditer("<p>@((\w|-){1,25})", sanitized):
u = get_user(i.group(1), graceful=True)
if u:
sanitized = sanitized.replace(i.group(0), f'''<p><a href="/id/{u.id}"><img alt="@{u.username}'s profile picture" loading="lazy" src="/uid/{u.id}/pic" class="pp20">@{u.username}</a>''')
sanitized = sanitized.replace(i.group(0), f'''<p><a href="/id/{u.id}"><img alt="@{u.username}'s profile picture" loading="lazy" src="/uid/{u.id}/pic" class="pp20">@{u.username}</a>''', 1)
else:
sanitized = re.sub('(^|\s|\n|<p>)\/?((r|u)\/\w{3,25})', r'\1<a href="https://old.reddit.com/\2" rel="nofollow noopener noreferrer">\2</a>', sanitized)
@ -118,9 +118,9 @@ def sanitize(sanitized, noimages=False, alert=False, comment=False):
if u and (not g.v.any_block_exists(u) or g.v.admin_level > 1):
if noimages:
sanitized = sanitized.replace(i.group(0), f'{i.group(1)}<a href="/id/{u.id}">@{u.username}</a>')
sanitized = sanitized.replace(i.group(0), f'{i.group(1)}<a href="/id/{u.id}">@{u.username}</a>', 1)
else:
sanitized = sanitized.replace(i.group(0), f'''{i.group(1)}<a href="/id/{u.id}"><img alt="@{u.username}'s profile picture" loading="lazy" src="/uid/{u.id}/pic" class="pp20">@{u.username}</a>''')
sanitized = sanitized.replace(i.group(0), f'''{i.group(1)}<a href="/id/{u.id}"><img alt="@{u.username}'s profile picture" loading="lazy" src="/uid/{u.id}/pic" class="pp20">@{u.username}</a>''', 1)
for i in re.finditer('https://i\.imgur\.com/(([^_]*?)\.(jpg|png|jpeg))', sanitized):

View File

@ -58,6 +58,9 @@ def remove_admin(v, username):
@limiter.limit("1/second;30/minute;200/hour;1000/day")
@admin_level_required(3)
def distribute(v, comment):
autobetter = g.db.query(User).filter_by(id=AUTOBETTER_ID).one_or_none()
if autobetter.coins == 0: return {"error": "@AutoBetter has 0 coins"}
try: comment = int(comment)
except: abort(400)
post = g.db.query(Comment.parent_submission).filter_by(id=comment).one_or_none()[0]
@ -67,6 +70,10 @@ def distribute(v, comment):
for option in post.bet_options: pool += option.upvotes
pool *= 200
autobetter.coins -= pool
if autobetter.coins < 0: autobetter.coins = 0
g.db.add(autobetter)
votes = g.db.query(CommentVote).filter_by(comment_id=comment)
coinsperperson = int(pool / votes.count())
@ -76,11 +83,6 @@ def distribute(v, comment):
u.coins += coinsperperson
add_notif(cid, u.id)
autobetter = g.db.query(User).filter_by(id=AUTOBETTER_ID).one_or_none()
autobetter.coins -= pool
if autobetter.coins < 0: return {"error": "Not enough coins in bool"}, 400
g.db.add(autobetter)
cid = notif_comment(f"You lost the 200 coins you bet on [{post.permalink}]({post.permalink}) :marseylaugh:")
cids = [x.id for x in post.bet_options]
cids.remove(comment)
@ -500,14 +502,11 @@ def users_list(v):
@admin_level_required(2)
def alt_votes_get(v):
if not request.values.get("u1") or not request.values.get("u2"):
return render_template("admin/alt_votes.html", v=v)
u1 = request.values.get("u1")
u2 = request.values.get("u2")
if not u1 or not u2:
return redirect("/admin/alt_votes")
return render_template("admin/alt_votes.html", v=v)
u1 = get_user(u1)
u2 = get_user(u2)

View File

@ -356,7 +356,8 @@ def award_post(pid, v):
g.db.add(post.author)
g.db.commit()
if request.referrer and len(request.referrer) > 1: return redirect(request.referrer)
if request.referrer and len(request.referrer) > 1 and (request.referrer.startswith('/') or request.referrer.startswith(request.host_url)):
return redirect(request.referrer)
else: return redirect("/")
@ -540,7 +541,8 @@ def award_comment(cid, v):
g.db.add(c.author)
g.db.commit()
if request.referrer and len(request.referrer) > 1: return redirect(request.referrer)
if request.referrer and len(request.referrer) > 1 and (request.referrer.startswith('/') or request.referrer.startswith(request.host_url)):
return redirect(request.referrer)
else: return redirect("/")
@app.get("/admin/awards")

View File

@ -469,29 +469,32 @@ def api_comment(v):
if len(c.body) > 500: notifbody = c.body[:500] + '...'
else: notifbody = c.body
beams_client.publish_to_interests(
interests=[f'{request.host}{parent.author.id}'],
publish_body={
'web': {
'notification': {
'title': f'New reply by @{v.username}',
'body': notifbody,
'deep_link': f'https://{site}/comment/{c.id}?context=9&read=true#context',
'icon': f'https://{request.host}/assets/images/{SITE_NAME}/icon.webp',
}
},
'fcm': {
'notification': {
'title': f'New reply by @{v.username}',
'body': notifbody,
try:
beams_client.publish_to_interests(
interests=[f'{request.host}{parent.author.id}'],
publish_body={
'web': {
'notification': {
'title': f'New reply by @{v.username}',
'body': notifbody,
'deep_link': f'https://{site}/comment/{c.id}?context=9&read=true#context',
'icon': f'https://{request.host}/assets/images/{SITE_NAME}/icon.webp',
}
},
'data': {
'url': f'comment/{c.id}?context=9&read=true#context',
'fcm': {
'notification': {
'title': f'New reply by @{v.username}',
'body': notifbody,
},
'data': {
'url': f'comment/{c.id}?context=9&read=true#context',
}
}
}
},
)
},
)
except Exception as e:
print(e)
print(c.id)
vote = CommentVote(user_id=v.id,
@ -512,7 +515,7 @@ def api_comment(v):
c.voted = 1
if v.id in AUTO_UPVOTE_IDS:
if v.id == PIZZASHILL_ID:
autovote = CommentVote(user_id=CARP_ID, comment_id=c.id, vote_type=1)
g.db.add(autovote)
autovote = CommentVote(user_id=AEVANN_ID, comment_id=c.id, vote_type=1)
@ -524,6 +527,14 @@ def api_comment(v):
g.db.add(v)
c.upvotes += 3
g.db.add(c)
elif v.id == HIL_ID:
autovote = CommentVote(user_id=CARP_ID, comment_id=c.id, vote_type=1)
g.db.add(autovote)
v.coins += 1
v.truecoins += 1
g.db.add(v)
c.upvotes += 1
g.db.add(c)
g.db.commit()

View File

@ -13,13 +13,12 @@ def error_400(e):
@app.errorhandler(401)
def error_401(e):
path = request.path
qs = urlencode(dict(request.values))
argval = quote(f"{path}?{qs}", safe='')
output = f"/login?redirect={argval}"
if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error": "401 Not Authorized"}, 401
else: return redirect(output)
else:
path = request.path
qs = urlencode(dict(request.values))
argval = quote(f"{path}?{qs}", safe='')
return redirect(f"/login?redirect={argval}")
@app.errorhandler(403)
@ -61,4 +60,6 @@ def error_500(e):
@app.post("/allow_nsfw")
def allow_nsfw():
session["over_18"] = int(time.time()) + 3600
return redirect(request.values.get("redir", "/"))
redir = request.values.get("redir")
if redir and redir.startswith(request.host_url) or redir.startswith('/'): return redirect(redir)
return redirect('/')

View File

@ -6,11 +6,6 @@ from files.classes.submission import Submission
defaulttimefilter = environ.get("DEFAULT_TIME_FILTER", "all").strip()
SITE_NAME = environ.get("SITE_NAME", "").strip()
@app.get("/post/")
@auth_required
def slash_post(v):
return redirect("/")
@app.post("/clear")
@auth_required
def clear(v):
@ -123,7 +118,8 @@ def notifications(v):
@auth_desired
def front_all(v):
if not v and request.path == "/" and not request.headers.get("Authorization"): return redirect(f"/logged_out{request.full_path}")
if not v and request.path == "/" and not request.headers.get("Authorization"):
return redirect(f"/logged_out{request.full_path}")
if v and request.path.startswith('/logged_out'): v = None
@ -436,7 +432,7 @@ def comment_idlist(page=1, v=None, nsfw=False, sort="new", t="all"):
elif sort == "controversial":
comments = comments.order_by(-1 * Comment.upvotes * Comment.downvotes * Comment.downvotes)
elif sort == "top":
comments = comments.order_by(Comment.realupvotes.desc())
comments = comments.order_by(Comment.downvotes - Comment.upvotes)
elif sort == "bottom":
comments = comments.order_by(Comment.upvotes - Comment.downvotes)
@ -466,4 +462,18 @@ def all_comments(v):
idlist = idlist[:25]
if request.headers.get("Authorization"): return {"data": [x.json for x in comments]}
return render_template("home_comments.html", v=v, sort=sort, t=t, page=page, comments=comments, standalone=True, next_exists=next_exists)
return render_template("home_comments.html", v=v, sort=sort, t=t, page=page, comments=comments, standalone=True, next_exists=next_exists)
@app.get("/transfers")
@auth_required
def transfers(v):
page = int(request.values.get("page", 1))
comments = g.db.query(Comment).filter(Comment.author_id == NOTIFICATIONS_ID, Comment.parent_submission == None, Comment.distinguish_level == 6, Comment.body_html.like("%</a> has transferred %"), Comment.created_utc == 0).offset(25 * (page - 1)).limit(26).all()
next_exists = len(comments) > 25
comments = comments[:25]
return render_template("transfers.html", v=v, page=page, comments=comments, standalone=True, next_exists=next_exists)

View File

@ -12,13 +12,14 @@ valid_password_regex = re.compile("^.{8,100}$")
@auth_desired
def login_get(v):
redir = request.values.get("redirect", "/").replace("/logged_out", "").strip()
if v:
return redirect(redir)
redir = request.values.get("redirect")
if redir:
redir = redir.replace("/logged_out", "").strip()
if not redir.startswith(request.host_url) and not redir.startswith('/'): redir = None
return render_template("login.html",
failed=False,
redirect=redir)
if v and redir: return redirect(redir)
return render_template("login.html", failed=False, redirect=redir)
def check_for_alts(current_id):
@ -137,10 +138,13 @@ def login_post():
if account.id != PW_ID: check_for_alts(account.id)
redir = request.values.get("redirect", "/").replace("/logged_out", "").strip()
g.db.commit()
redir = request.values.get("redirect")
if redir:
redir = redir.replace("/logged_out", "").strip()
if not redir.startswith(request.host_url) and not redir.startswith('/'): redir = '/'
return redirect(redir)

View File

@ -96,7 +96,8 @@ def submit_get(v):
@app.get("/logged_out/post/<pid>/<anything>")
@auth_desired
def post_id(pid, anything=None, v=None):
if not v and not request.path.startswith('/logged_out') and not request.headers.get("Authorization"): return redirect(f"/logged_out{request.full_path}")
if not v and not request.path.startswith('/logged_out') and not request.headers.get("Authorization"):
return redirect(f"/logged_out{request.full_path}")
if v and request.path.startswith('/logged_out'): v = None
@ -169,7 +170,7 @@ def post_id(pid, anything=None, v=None):
elif sort == "controversial":
comments = comments.order_by(-1 * Comment.upvotes * Comment.downvotes * Comment.downvotes)
elif sort == "top":
comments = comments.order_by(-Comment.upvotes - Comment.downvotes)
comments = comments.order_by(Comment.realupvotes.desc())
elif sort == "bottom":
comments = comments.order_by(Comment.upvotes - Comment.downvotes)
@ -186,7 +187,7 @@ def post_id(pid, anything=None, v=None):
elif sort == "controversial":
comments = comments.order_by(-1 * Comment.upvotes * Comment.downvotes * Comment.downvotes)
elif sort == "top":
comments = comments.order_by(-Comment.upvotes - Comment.downvotes)
comments = comments.order_by(Comment.realupvotes.desc())
elif sort == "bottom":
comments = comments.order_by(Comment.upvotes - Comment.downvotes)
@ -288,7 +289,7 @@ def viewmore(v, pid, sort, offset):
elif sort == "controversial":
comments = comments.order_by(-1 * Comment.upvotes * Comment.downvotes * Comment.downvotes)
elif sort == "top":
comments = comments.order_by(-Comment.upvotes - Comment.downvotes)
comments = comments.order_by(Comment.realupvotes.desc())
elif sort == "bottom":
comments = comments.order_by(Comment.upvotes - Comment.downvotes)
@ -305,7 +306,7 @@ def viewmore(v, pid, sort, offset):
elif sort == "controversial":
comments = comments.order_by(-1 * Comment.upvotes * Comment.downvotes * Comment.downvotes)
elif sort == "top":
comments = comments.order_by(-Comment.upvotes - Comment.downvotes)
comments = comments.order_by(Comment.realupvotes.desc())
elif sort == "bottom":
comments = comments.order_by(Comment.upvotes - Comment.downvotes)
@ -1064,6 +1065,7 @@ def submit_post(v):
title = url_match.group(5)
if "Snapshots:\n\n" not in body: body += "Snapshots:\n\n"
if f'**[{title}]({href})**:\n\n' in body: continue
body += f'**[{title}]({href})**:\n\n'
if href.startswith('https://old.reddit.com/'):
body += f'* [unddit.com](https://unddit.com/{href.replace("https://old.reddit.com/", "")})\n'
@ -1106,7 +1108,7 @@ def submit_post(v):
send_discord_message(f"https://{site}{new_post.permalink}")
cache.delete_memoized(changeloglist)
if v.id in AUTO_UPVOTE_IDS:
if v.id in (PIZZASHILL_ID, HIL_ID):
autovote = Vote(user_id=CARP_ID, submission_id=new_post.id, vote_type=1)
g.db.add(autovote)
autovote = Vote(user_id=AEVANN_ID, submission_id=new_post.id, vote_type=1)

View File

@ -255,7 +255,7 @@ def searchcomments(v):
elif sort == "controversial":
comments = comments.order_by(-1 * Comment.upvotes * Comment.downvotes * Comment.downvotes)
elif sort == "top":
comments = comments.order_by(Comment.realupvotes.desc())
comments = comments.order_by(Comment.downvotes - Comment.upvotes)
elif sort == "bottom":
comments = comments.order_by(Comment.upvotes - Comment.downvotes)

View File

@ -473,7 +473,7 @@ def gumroad(v):
send_repeatable_notification(v.id, f"You have received {procoins} Marseybux! You can use them to buy awards in the [shop](/shop).")
if v.truecoins > 150 and v.patron: v.cluballowed = True
if v.patron > 3 and v.verified == None: v.verified = "Verified"
if v.patron > 1 and v.verified == None: v.verified = "Verified"
g.db.add(v)

View File

@ -244,11 +244,13 @@ def transfer_coins(v, username):
tax = math.ceil(amount*0.03)
tax_receiver = g.db.query(User).filter_by(id=TAX_RECEIVER_ID).one_or_none()
tax_receiver.coins += tax
log_message = f"[@{v.username}](/id/{v.id}) has transferred {amount} {app.config['COINS_NAME']} to [@{receiver.username}]({receiver.id})"
send_repeatable_notification(TAX_RECEIVER_ID, log_message)
g.db.add(tax_receiver)
else: tax = 0
if TAX_RECEIVER_ID:
log_message = f"[@{v.username}](/id/{v.id}) has transferred {amount} {app.config['COINS_NAME']} to [@{receiver.username}]({receiver.id})"
send_repeatable_notification(TAX_RECEIVER_ID, log_message)
receiver.coins += amount-tax
v.coins -= amount
send_repeatable_notification(receiver.id, f"🤑 [@{v.username}](/id/{v.id}) has gifted you {amount-tax} {app.config['COINS_NAME']}!")
@ -436,7 +438,7 @@ def message2(v, username):
if len(message) > 500: notifbody = message[:500] + '...'
else: notifbody = message
beams_client.publish_to_interests(
interests=[f'{request.host}{user.id}'],
publish_body={
@ -628,7 +630,7 @@ def u_username(username, v=None):
if username != u.username:
return redirect(request.path.replace(username, u.username))
return redirect(request.full_path.replace(username, u.username))
if u.reserved:
if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error": f"That username is reserved for: {u.reserved}"}
@ -796,7 +798,7 @@ def u_username_comments(username, v=None):
elif sort == "controversial":
comments = comments.order_by(-1 * Comment.upvotes * Comment.downvotes * Comment.downvotes)
elif sort == "top":
comments = comments.order_by(Comment.realupvotes.desc())
comments = comments.order_by(Comment.downvotes - Comment.upvotes)
elif sort == "bottom":
comments = comments.order_by(Comment.upvotes - Comment.downvotes)

View File

@ -102,7 +102,7 @@ def api_vote_post(post_id, new, v):
post.author.coins += 1
post.author.truecoins += 1
g.db.add(post.author)
real = (bool(v.profileurl) or bool(v.customtitle) or v.namecolor != defaultcolor) and not v.agendaposter and not v.shadowbanned
real = new == -1 or (not v.agendaposter and not v.shadowbanned and (bool(v.profileurl) or bool(v.customtitle) or v.namecolor != defaultcolor))
vote = Vote(user_id=v.id,
vote_type=new,
submission_id=post_id,
@ -115,7 +115,7 @@ def api_vote_post(post_id, new, v):
g.db.flush()
post.upvotes = g.db.query(Vote.id).filter_by(submission_id=post.id, vote_type=1).count()
post.downvotes = g.db.query(Vote.id).filter_by(submission_id=post.id, vote_type=-1).count()
post.realupvotes = g.db.query(Vote.id).filter_by(submission_id=post.id, vote_type=1, real=True).count() - g.db.query(Vote.id).filter_by(submission_id=post.id, vote_type=1, real=False).count() + g.db.query(Vote.id).filter_by(submission_id=post.id, vote_type=-1).count()
post.realupvotes = g.db.query(Vote.id).filter_by(submission_id=post.id, real=True).count()
if post.author.progressivestack: post.realupvotes *= 2
g.db.add(post)
g.db.commit()
@ -167,7 +167,7 @@ def api_vote_comment(comment_id, new, v):
comment.author.coins += 1
comment.author.truecoins += 1
g.db.add(comment.author)
real = (bool(v.profileurl) or bool(v.customtitle) or v.namecolor != defaultcolor) and not v.agendaposter and not v.shadowbanned
real = new == -1 or (not v.agendaposter and not v.shadowbanned and (bool(v.profileurl) or bool(v.customtitle) or v.namecolor != defaultcolor))
vote = CommentVote(user_id=v.id,
vote_type=new,
comment_id=comment_id,
@ -181,7 +181,7 @@ def api_vote_comment(comment_id, new, v):
g.db.flush()
comment.upvotes = g.db.query(CommentVote.id).filter_by(comment_id=comment.id, vote_type=1).count()
comment.downvotes = g.db.query(CommentVote.id).filter_by(comment_id=comment.id, vote_type=-1).count()
comment.realupvotes = g.db.query(CommentVote.id).filter_by(comment_id=comment.id, vote_type=1, real=True).count() - g.db.query(CommentVote.id).filter_by(comment_id=comment.id, vote_type=1, real=False).count() + g.db.query(CommentVote.id).filter_by(comment_id=comment.id, vote_type=-1).count()
comment.realupvotes = g.db.query(CommentVote.id).filter_by(comment_id=comment.id, real=True).count()
if comment.author.progressivestack: comment.realupvotes *= 2
g.db.add(comment)
g.db.commit()

View File

@ -60,7 +60,7 @@
<label class="custom-control-label" for="{{k}}"></label>
</div>
</td>
<td><label for="badge-{{k}}"><img alt="{{v['name']}}" loading="lazy" src="/static/assets/images/badges/{{v['name']}}.webp?a=4" width="70px" height="70px"></label></td>
<td><label for="badge-{{k}}"><img alt="{{v['name']}}" loading="lazy" src="/static/assets/images/badges/{{v['name']}}.webp?a=5" width="70px" height="70px"></label></td>
<td>{{v['name']}}</td>
<td>{{v['description']}}</td>
</tr>

View File

@ -60,7 +60,7 @@
<label class="custom-control-label" for="{{k}}"></label>
</div>
</td>
<td><label for="badge-{{k}}"><img alt="{{v['name']}}" loading="lazy" src="/static/assets/images/badges/{{v['name']}}.webp?a=4" width="70px" height="70px"></label></td>
<td><label for="badge-{{k}}"><img alt="{{v['name']}}" loading="lazy" src="/static/assets/images/badges/{{v['name']}}.webp?a=5" width="70px" height="70px"></label></td>
<td>{{v['name']}}</td>
<td>{{v['description']}}</td>
</tr>

View File

@ -15,7 +15,7 @@
{% if v %}
<style>:root{--primary:#{{v.themecolor}}}</style>
<link rel="stylesheet" href="/static/assets/css/main.css?a=78"><link rel="stylesheet" href="/static/assets/css/{{v.theme}}.css?a=11">
<link rel="stylesheet" href="/static/assets/css/main.css?a=83"><link rel="stylesheet" href="/static/assets/css/{{v.theme}}.css?a=11">
{% if v.agendaposter %}
<style>
html {
@ -39,7 +39,7 @@
{% endif %}
{% else %}
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
<link rel="stylesheet" href="/static/assets/css/main.css?a=78"><link rel="stylesheet" href="/static/assets/css/{{'DEFAULT_THEME' | app_config}}.css?a=3">
<link rel="stylesheet" href="/static/assets/css/main.css?a=83"><link rel="stylesheet" href="/static/assets/css/{{'DEFAULT_THEME' | app_config}}.css?a=3">
{% endif %}
</head>
@ -111,7 +111,7 @@
<div class="splash-overlay"></div>
<img alt="cover" loading="lazy" class="splash-img" src="/static/assets/images/{{SITE_NAME}}/cover.webp?a=3"></img>
<img alt="cover" loading="lazy" class="splash-img" src="/static/assets/images/{{SITE_NAME}}/cover.webp?a=1004"></img>
</div>
</div>

View File

@ -21,7 +21,7 @@
{% for k,v in badges.items() %}
<tr>
<td>{{v['name']}}</td>
<td><img alt="{{v['name']}}" loading="lazy" src="/static/assets/images/badges/{{v['name']}}.webp?a=4" width=50 height=50>
<td><img alt="{{v['name']}}" loading="lazy" src="/static/assets/images/badges/{{v['name']}}.webp?a=5" width=50 height=50>
<td>{{v['description']}}</td>
</tr>
{% endfor %}

View File

@ -149,8 +149,8 @@
{% if c.post and c.post.over_18 %}<span class="badge badge-danger text-small-extra mr-1">+18</span>{% endif %}
<span class="align-top">
{% if c.post %}
{% if c.author_id==v.id and c.child_comments and is_notification_page%}
<span class="font-weight-bold">Comment {{'Replies' if (c.child_comments | length)>1 else 'Reply'}}: <a href="{{c.post.permalink}}">{{c.post.realtitle(v) | safe}}</a></span>
{% if c.author_id==v.id and replies and is_notification_page%}
<span class="font-weight-bold">Comment {{'Replies' if (replies | length)>1 else 'Reply'}}: <a href="{{c.post.permalink}}">{{c.post.realtitle(v) | safe}}</a></span>
{% elif c.post.author_id==v.id and c.level == 1 and is_notification_page%}
<span class="font-weight-bold">Post Reply: <a href="{{c.post.permalink}}">{{c.post.realtitle(v) | safe}}</a></span>
{% elif is_notification_page and c.parent_submission in v.subscribed_idlist() %}
@ -217,7 +217,7 @@
{% endif %}
<a class="user-name text-decoration-none" onclick='popclick({{c.author.json_popover(v) | tojson}})' data-bs-placement="bottom" data-bs-toggle="popover" data-bs-trigger="focus" data-content-id="popover" role="button" tabindex="0" style="color:#{{c.author.namecolor}}; font-size:12px; font-weight:bold;"><img alt="@{{c.author.username}}'s profile picture" 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 request.host == 'rdrama.net' %}class="mod"{% endif %}>{{c.author.username}}</span></a>
{% if c.author.customtitle %}&nbsp;<bdi style="color: #{{c.author.titlecolor}}">&nbsp;{% if c.author.quadrant %}<img alt="{{c.author.quadrant}} quadrant" loading="lazy" height="20" src="/static/assets/images/quadrants/{{c.author.quadrant}}.webp?a=3">{% endif %}{{c.author.customtitle | safe}}</bdi>{% endif %}
{% if c.author.customtitle %}&nbsp;<bdi style="color: #{{c.author.titlecolor}}">&nbsp;{% if c.author.quadrant %}<img alt="{{c.author.quadrant}} quadrant" loading="lazy" height="20" src="/static/assets/images/quadrants/{{c.author.quadrant}}.webp?a=1004">{% endif %}{{c.author.customtitle | safe}}</bdi>{% endif %}
{% if c.parent_comment_id and not standalone and level != 1 %}<a href="#comment-{{c.parent_comment_id}}-only" class="text-muted ml-2"><i class="fas fa-reply fa-sm fa-fw fa-flip-horizontal mr-1"></i>{{c.parent_comment.author.username}}</a>{% endif %}

View File

@ -7,7 +7,7 @@
<script src="/static/assets/js/bootstrap.js?a=202"></script>
{% if v %}
<style>:root{--primary:#{{v.themecolor}}}</style>
<link rel="stylesheet" href="/static/assets/css/main.css?a=78">
<link rel="stylesheet" href="/static/assets/css/main.css?a=83">
<link rel="stylesheet" href="/static/assets/css/{{v.theme}}.css?a=11">
{% if v.agendaposter %}
<style>
@ -32,7 +32,7 @@
{% endif %}
{% else %}
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
<link rel="stylesheet" href="/static/assets/css/main.css?a=78"><link rel="stylesheet" href="/static/assets/css/{{'DEFAULT_THEME' | app_config}}.css?a=3">
<link rel="stylesheet" href="/static/assets/css/main.css?a=83"><link rel="stylesheet" href="/static/assets/css/{{'DEFAULT_THEME' | app_config}}.css?a=3">
{% endif %}
<meta charset="utf-8">

View File

@ -29,6 +29,9 @@
<li class="nav-item">
<a class="nav-link emojitab" data-bs-toggle="tab" href="#emoji-tab-flags">Flags</a>
</li>
<li class="nav-item">
<a class="nav-link emojitab" data-bs-toggle="tab" href="#emoji-tab-wolf">Zombie Wolf</a>
</li>
<li class="nav-item">
<a class="nav-link emojitab" data-bs-toggle="tab" href="#emoji-tab-misc">Misc</a>
</li>
@ -70,6 +73,9 @@
<div class="tab-pane fade" id="emoji-tab-flags">
<div class="d-flex flex-wrap py-3 pl-2" id="EMOJIS_flags"></div>
</div>
<div class="tab-pane fade" id="emoji-tab-wolf">
<div class="d-flex flex-wrap py-3 pl-2" id="EMOJIS_wolf"></div>
</div>
<div class="tab-pane fade" id="emoji-tab-misc">
<div class="d-flex flex-wrap py-3 pl-2" id="EMOJIS_misc"></div>
</div>
@ -80,7 +86,7 @@
</div>
</div>
<script src="/static/assets/js/emoji_modal.js?a=202"></script>
<script src="/static/assets/js/emoji_modal.js?a=205"></script>
<style>
a.emojitab {

View File

@ -10,7 +10,7 @@
<div class="row justify-content-center">
<div class="col-10 col-md-5">
<div class="text-center px-3 my-8">
<img alt=":#marseybrainlet:" loading="lazy" src="/static/assets/images/emojis/marseybrainlet.webp?a=3">
<img alt=":#marseybrainlet:" loading="lazy" src="/static/assets/images/emojis/marseybrainlet.webp?a=1004">
<pre></pre>
<h1 class="h5">400 Bad Request</h1>
<p class="text-muted mb-5">That request was bad and you should feel bad.</p>

View File

@ -11,7 +11,7 @@
<div class="col-10 col-md-5">
<div class="text-center px-3 my-8">
<img alt=":#marseydead:" loading="lazy" src="/static/assets/images/emojis/marseydead.webp?a=3">
<img alt=":#marseydead:" loading="lazy" src="/static/assets/images/emojis/marseydead.webp?a=1004">
<pre></pre>
<h1 class="h5">401 Not Authorized</h1>

View File

@ -10,7 +10,7 @@
<div class="row justify-content-center">
<div class="col-10 col-md-5">
<div class="text-center px-3 my-8">
<img alt=":#marseytroll:" loading="lazy" src="/static/assets/images/emojis/marseytroll.webp?a=3">
<img alt=":#marseytroll:" loading="lazy" src="/static/assets/images/emojis/marseytroll.webp?a=1004">
<pre></pre>
<h1 class="h5">403 Forbidden</h1>
<p class="text-muted mb-5">YOU AREN'T WELCOME HERE GO AWAY</p>

View File

@ -10,7 +10,7 @@
<div class="row justify-content-center">
<div class="col-10 col-md-5">
<div class="text-center px-3 my-8">
<img alt=":#marseyconfused" loading="lazy" src="/static/assets/images/emojis/marseyconfused.webp?a=3">
<img alt=":#marseyconfused" loading="lazy" src="/static/assets/images/emojis/marseyconfused.webp?a=1004">
<pre></pre>
<h1 class="h5">404 Page Not Found</h1>
<p class="text-muted mb-5">Someone typed something wrong and it was probably you, please do better.</p>

View File

@ -10,7 +10,7 @@
<div class="row justify-content-center">
<div class="col-10 col-md-5">
<div class="text-center px-3 my-8">
<img alt=":#marseyretard:" loading="lazy" src="/static/assets/images/emojis/marseyretard.webp?a=3">
<img alt=":#marseyretard:" loading="lazy" src="/static/assets/images/emojis/marseyretard.webp?a=1004">
<pre></pre>
<h1 class="h5">405 Method Not Allowed</h1>
<p class="text-muted mb-5">idk how anyone gets this error but if you see this, remember to follow @carpathianflorist<BR>the original error text here talked about internet gremlins and wtf</p>

View File

@ -10,7 +10,7 @@
<div class="row justify-content-center">
<div class="col-10 col-md-5">
<div class="text-center px-3 my-8">
<img alt=":#marseyrentfree:" loading="lazy" src="/static/assets/images/emojis/marseyrentfree.webp?a=3">
<img alt=":#marseyrentfree:" loading="lazy" src="/static/assets/images/emojis/marseyrentfree.webp?a=1004">
<pre></pre>
<h1 class="h5">429 Too Many Requests</h1>
<p class="text-muted mb-5">go spam somewhere else nerd</p>

View File

@ -10,7 +10,7 @@
<div class="row justify-content-center">
<div class="col-10 col-md-5">
<div class="text-center px-3 my-8">
<img alt=":#marseydead:" loading="lazy" src="/static/assets/images/emojis/marseydead.webp?a=3">
<img alt=":#marseydead:" loading="lazy" src="/static/assets/images/emojis/marseydead.webp?a=1004">
<pre></pre>
<h1 class="h5">500 Internal Server Error</h1>
<p class="text-muted mb-5">Hiiiii it's carp! I think this error means that there's a timeout error. And I think that means something took too long to load so it decided not to work at all. If you keep seeing this on the same page <I>but not other pages</I>, then something is probably wrong with that specific function. It may not be called a function, but that sounds right to me. Anyway, ping me and I'll whine to someone smarter to fix it. Don't bother them. Thanks ily <3</p>

View File

@ -10,7 +10,7 @@
<div class="row justify-content-center">
<div class="col col-md-5">
<div class="text-center px-3 mt-5">
<img alt=":#marseytwerking:" loading="lazy" src="/static/assets/images/emojis/marseytwerking.webp?a=3">
<img alt=":#marseytwerking:" loading="lazy" src="/static/assets/images/emojis/marseytwerking.webp?a=1004">
<h1 class="h5">Are you over 18?</h1>
<p class="mb-5">This post is rated +18 (Adult-Only). You must be 18 or older to continue. Are you sure you want to proceed?</p>
<div class="btn-toolbar justify-content-center mb-4">

View File

@ -10,7 +10,7 @@
<div class="row justify-content-center">
<div class="col-10 col-md-5">
<div class="text-center px-3 my-8">
<img alt=":#marseymerchant:" loading="lazy" class="mb-2" src="/static/assets/images/emojis/marseymerchant.webp?a=3">
<img alt=":#marseymerchant:" loading="lazy" class="mb-2" src="/static/assets/images/emojis/marseymerchant.webp?a=1004">
<h1 class="h5">401 Not Authorized</h1>
<p class="text-muted">This page is only available to {% if request.host == "rdrama.net" %}paypigs{% else %}patrons{% endif %}:</p>
<a rel="nofollow noopener noreferrer" href="{{'GUMROAD_LINK' | app_config}}">{{'GUMROAD_LINK' | app_config}}</a>

View File

@ -69,22 +69,22 @@ You can use Markdown formatting:
<tr>
<td>Emojis</td>
<td>:marseylove:</td>
<td><img loading="lazy" data-bs-toggle="tooltip" class="emj" alt=":marseylove:" data-bs-original-title=":marseylove:" delay="0" height="30" src="/static/assets/images/emojis/marseylove.webp?a=3"></td>
<td><img loading="lazy" data-bs-toggle="tooltip" class="emj" alt=":marseylove:" data-bs-original-title=":marseylove:" delay="0" height="30" src="/static/assets/images/emojis/marseylove.webp?a=1004"></td>
</tr>
<tr>
<td>Mirrored Emojis</td>
<td>:!marseylove:</td>
<td><img loading="lazy" data-bs-toggle="tooltip" class="emj mirrored" alt=":!marseylove:" data-bs-original-title=":!marseylove:" delay="0" height="30" src="/static/assets/images/emojis/marseylove.webp?a=3"></td>
<td><img loading="lazy" data-bs-toggle="tooltip" class="emj mirrored" alt=":!marseylove:" data-bs-original-title=":!marseylove:" delay="0" height="30" src="/static/assets/images/emojis/marseylove.webp?a=1004"></td>
</tr>
<tr>
<td>Large Emojis</td>
<td>:#marseylove:</td>
<td><img loading="lazy" data-bs-toggle="tooltip" class="emj" alt=":!marseylove:" data-bs-original-title=":!marseylove:" delay="0" src="/static/assets/images/emojis/marseylove.webp?a=3"></td>
<td><img loading="lazy" data-bs-toggle="tooltip" class="emj" alt=":!marseylove:" data-bs-original-title=":!marseylove:" delay="0" src="/static/assets/images/emojis/marseylove.webp?a=1004"></td>
</tr>
<tr>
<td>Large Mirroed Emojis</td>
<td>:#!marseylove:</td>
<td><img loading="lazy" data-bs-toggle="tooltip" class="emj mirrored" alt=":!marseylove:" data-bs-original-title=":!marseylove:" delay="0" src="/static/assets/images/emojis/marseylove.webp?a=3"></td>
<td><img loading="lazy" data-bs-toggle="tooltip" class="emj mirrored" alt=":!marseylove:" data-bs-original-title=":!marseylove:" delay="0" src="/static/assets/images/emojis/marseylove.webp?a=1004"></td>
</tr>
<tr>
<td>Poll Options</td>

View File

@ -10,7 +10,7 @@
<a href="/" class="navbar-brand mr-auto">
<img alt="header icon" width=32.32 height=25 src="/static/assets/images/{{SITE_NAME}}/headericon.webp?a=8" style="object-fit: contain;">
{% if request.host != 'pcmemes.net' %}
<img alt="logo" src="/static/assets/images/{{SITE_NAME}}/logo.webp?a=3" height=20 width=77>
<img alt="logo" src="/static/assets/images/{{SITE_NAME}}/logo.webp?a=1004" height=20 width=77>
{% endif %}
</a>
</div>

View File

@ -170,7 +170,7 @@
<div class="d-none" id="pusherid">{{PUSHER_ID}}</div>
<script src="/static/assets/js/pusher.js?a=202"></script>
<script>
if (Android){
if (typeof Android !== 'undefined') {
Android.Subscribe('{{request.host}}{{v.id}}');
}
</script>

View File

@ -4,7 +4,6 @@
{% block sortnav %}{% endblock %}
{% block content %}
<pre></pre>
<div class="d-flex justify-content-between align-items-center">
@ -52,7 +51,6 @@
</div>
</div>
<div class="row no-gutters {% if listing %}mt-md-3{% elif not listing %}my-md-3{% endif %}">
<div class="col-12 px-3">
@ -73,14 +71,14 @@
<ul class="pagination pagination-sm mb-0">
{% if page>1 %}
<li class="page-item">
<small><a class="page-link" href="?page={{page-1}}&sort={{sort}}&t={{t}}{% if shadowbanned %}&shadowbanned=true{% endif %}" tabindex="-1">Prev</a></small>
<small><a class="page-link" href="?page={{page-1}}&sort={{sort}}&t={{t}}" tabindex="-1">Prev</a></small>
</li>
{% else %}
<li class="page-item disabled"><span class="page-link">Prev</span></li>
{% endif %}
{% if next_exists %}
<li class="page-item">
<small><a class="page-link" href="?page={{page+1}}&sort={{sort}}&t={{t}}{% if shadowbanned %}&shadowbanned=true{% endif %}">Next</a></small>
<small><a class="page-link" href="?page={{page+1}}&sort={{sort}}&t={{t}}">Next</a></small>
</li>
{% else %}
<li class="page-item disabled"><span class="page-link">Next</span></li>

View File

@ -6,7 +6,7 @@
{% block content %}
{% if v %}
<style>:root{--primary:#{{v.themecolor}}}</style>
<link rel="stylesheet" href="/static/assets/css/main.css?a=78"><link rel="stylesheet" href="/static/assets/css/{{v.theme}}.css?a=11">
<link rel="stylesheet" href="/static/assets/css/main.css?a=83"><link rel="stylesheet" href="/static/assets/css/{{v.theme}}.css?a=11">
{% if v.agendaposter %}
<style>
html {
@ -30,7 +30,7 @@
{% endif %}
{% else %}
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
<link rel="stylesheet" href="/static/assets/css/main.css?a=78"><link rel="stylesheet" href="/static/assets/css/{{'DEFAULT_THEME' | app_config}}.css?a=3">
<link rel="stylesheet" href="/static/assets/css/main.css?a=83"><link rel="stylesheet" href="/static/assets/css/{{'DEFAULT_THEME' | app_config}}.css?a=3">
{% endif %}
<div class="row justify-content-around">
@ -56,10 +56,10 @@
<div class="dropdown dropdown-actions">
<button class="btn btn-secondary dropdown-toggle" role="button" id="dropdownMenuButton" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{% if admin %}<img src="/@{{admin}}/pic" alt="avatar" width=20 height=20 class="rounded-circle mr-2">{{admin}}{% else %}<img src="/static/assets/images/emojis/marseyjanny.webp" alt="avatar" width=20 height=20 class="rounded-circle mr-2">All{% endif %}
{% if admin %}<img src="/@{{admin}}/pic" alt="avatar" width=20 height=20 class="rounded-circle mr-2">{{admin}}{% else %}<img src="/static/assets/images/emojis/marseyjanny.webp?a=1004" alt="avatar" width=20 height=20 class="rounded-circle mr-2">All{% endif %}
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton" x-placement="bottom-start" style="position: absolute; will-change: transform; top: 0px; left: 0px; transform: translate3d(0px, 31px, 0px);">
<a class="dropdown-item" href="/log{% if type %}?kind={{type}}{% endif %}"><img src="/static/assets/images/emojis/marseyjanny.webp" alt="avatar" width=20 height=20 class="rounded-circle mr-2">All</a>
<a class="dropdown-item" href="/log{% if type %}?kind={{type}}{% endif %}"><img src="/static/assets/images/emojis/marseyjanny.webp?a=1004" alt="avatar" width=20 height=20 class="rounded-circle mr-2">All</a>
{% for a in admins %}
<a class="dropdown-item" href="?admin={{a}}{% if type %}&kind={{type}}{% endif %}"><img loading="lazy" src="/@{{a}}/pic" alt="avatar" width=20 height=20 class="rounded-circle mr-2">{{a}}</a>
{% endfor %}

View File

@ -18,7 +18,7 @@
{% endblock %}
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
<link rel="stylesheet" href="/static/assets/css/main.css?a=78">
<link rel="stylesheet" href="/static/assets/css/main.css?a=83">
<link rel="stylesheet" href="/static/assets/css/{{'DEFAULT_THEME' | app_config}}.css?a=3">
</head>
@ -117,7 +117,7 @@
<div class="splash-overlay"></div>
<img alt="cover" loading="lazy" class="splash-img" src="/static/assets/images/{{SITE_NAME}}/cover.webp?a=3"></img>
<img alt="cover" loading="lazy" class="splash-img" src="/static/assets/images/{{SITE_NAME}}/cover.webp?a=1004"></img>
</div>
</div>

View File

@ -14,7 +14,7 @@
<title>2-Step Login - {{SITE_NAME}}</title>
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
<link rel="stylesheet" href="/static/assets/css/main.css?a=78"><link rel="stylesheet" href="/static/assets/css/{{'DEFAULT_THEME' | app_config}}.css?a=3">
<link rel="stylesheet" href="/static/assets/css/main.css?a=83"><link rel="stylesheet" href="/static/assets/css/{{'DEFAULT_THEME' | app_config}}.css?a=3">
</head>
@ -94,7 +94,7 @@
<div class="splash-overlay"></div>
<img alt="cover" loading="lazy" class="splash-img" src="/static/assets/images/{{SITE_NAME}}/cover.webp?a=3"></img>
<img alt="cover" loading="lazy" class="splash-img" src="/static/assets/images/{{SITE_NAME}}/cover.webp?a=1004"></img>
</div>
</div>

View File

@ -19,7 +19,7 @@
<tr>
<td style="font-weight: bold">{{loop.index}}</td>
<td style="font-weight: bold">{{k[0]}}</td>
<td><img class="marsey" loading="lazy" data-bs-toggle="tooltip" alt=":{{k[0]}}:" title=":{{k[0]}}:" delay="0" src="/static/assets/images/emojis/{{k[0]}}.webp?a=1003" ></td>
<td><img class="marsey" loading="lazy" data-bs-toggle="tooltip" alt=":{{k[0]}}:" title=":{{k[0]}}:" delay="0" src="/static/assets/images/emojis/{{k[0]}}.webp?a=1004" ></td>
<td style="font-weight: bold">{{k[2]}}</td>
<td>{% if k[1] in ('anton-d','unknown') %}{{k[1]}}{% else %}<a style="font-weight:bold;" href="/@{{k[1]}}"><img alt="@{{k[1]}}'s profile picture" loading="lazy" src="/@{{k[1]}}/pic" class="pp20">{{k[1]}}</a>{% endif %}</td>
</tr>

View File

@ -14,7 +14,7 @@
<td style="font-weight:bold;">{{loop.index}}</td>
<td><a style="color:#{{u.namecolor}}; font-weight:bold;" href="/@{{u.username}}"><img alt="@{{u.username}}'s profile picture" loading="lazy" src="{{u.profile_url}}" class="pp20"><span {% if u.patron %}class="patron" style="background-color:#{{u.namecolor}}"{% endif %}>{{u.username}}</span></a></td>
<td><img alt="Patron-{{u.patron}}" loading="lazy" width=32 height=32 src="/static/assets/images/badges/Patron-{{u.patron}}.webp?a=4"></td>
<td><img alt="Patron-{{u.patron}}" loading="lazy" width=32 height=32 src="/static/assets/images/badges/Patron-{{u.patron}}.webp?a=5"></td>
</tr>
{% endfor %}
</table>

View File

@ -34,7 +34,7 @@
<style>:root{--primary:#{{v.themecolor}}}</style>
<link rel="stylesheet" href="/static/assets/css/main.css?a=78"><link rel="stylesheet" href="/static/assets/css/{{v.theme}}.css?a=11">
<link rel="stylesheet" href="/static/assets/css/main.css?a=83"><link rel="stylesheet" href="/static/assets/css/{{v.theme}}.css?a=11">
{% if v.agendaposter %}
<style>
html {

View File

@ -39,10 +39,10 @@
{% if v %}
<style>:root{--primary:#{{v.themecolor}}}</style>
<link rel="stylesheet" href="/static/assets/css/main.css?a=78"><link rel="stylesheet" href="/static/assets/css/{{v.theme}}.css?a=11">
<link rel="stylesheet" href="/static/assets/css/main.css?a=83"><link rel="stylesheet" href="/static/assets/css/{{v.theme}}.css?a=11">
{% else %}
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
<link rel="stylesheet" href="/static/assets/css/main.css?a=78"><link rel="stylesheet" href="/static/assets/css/{{'DEFAULT_THEME' | app_config}}.css?a=3">
<link rel="stylesheet" href="/static/assets/css/main.css?a=83"><link rel="stylesheet" href="/static/assets/css/{{'DEFAULT_THEME' | app_config}}.css?a=3">
{% endif %}
</head>

View File

@ -1,6 +1,6 @@
<div class="col sidebar text-left d-none d-lg-block pt-3 bg-white" style="max-width:300px">
{% set image = "/static/assets/images/" + SITE_NAME + "/banners/" + range(1,num_banners)|random()|string + ".webp?a=9" %}
{% set image = "/static/assets/images/" + SITE_NAME + "/banners/" + range(1,num_banners)|random()|string + ".webp?a=10" %}
<a role="button" data-bs-toggle="modal" data-bs-target="#expandImageModal" data-bs-url="{{image}}" onclick="expandDesktopImage('{{image}}')">
<img loading="lazy" src="{{image}}" width=100%>

View File

@ -31,7 +31,7 @@
<title>{% if ref_user %}{{ref_user.username}} invites you to {{SITE_NAME}}{% else %}Sign up - {{SITE_NAME}}{% endif %}</title>
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
<link rel="stylesheet" href="/static/assets/css/main.css?a=78"><link rel="stylesheet" href="/static/assets/css/{{'DEFAULT_THEME' | app_config}}.css?a=3">
<link rel="stylesheet" href="/static/assets/css/main.css?a=83"><link rel="stylesheet" href="/static/assets/css/{{'DEFAULT_THEME' | app_config}}.css?a=3">
</head>
@ -146,7 +146,7 @@
<div class="splash-overlay"></div>
<img alt="cover" loading="lazy" class="splash-img" src="/static/assets/images/{{SITE_NAME}}/cover.webp?a=3"></img>
<img alt="cover" loading="lazy" class="splash-img" src="/static/assets/images/{{SITE_NAME}}/cover.webp?a=1004"></img>
</div>
</div>

View File

@ -32,7 +32,7 @@
<title>{% if ref_user %}{{ref_user.username}} invites you to {{SITE_NAME}}{% else %}{{SITE_NAME}}{% endif %}</title>
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
<link rel="stylesheet" href="/static/assets/css/main.css?a=78"><link rel="stylesheet" href="/static/assets/css/{{'DEFAULT_THEME' | app_config}}.css?a=3">
<link rel="stylesheet" href="/static/assets/css/main.css?a=83"><link rel="stylesheet" href="/static/assets/css/{{'DEFAULT_THEME' | app_config}}.css?a=3">
</head>
@ -84,7 +84,7 @@
<div class="splash-overlay"></div>
<img alt="cover" loading="lazy" class="splash-img" src="/static/assets/images/{{SITE_NAME}}/cover.webp?a=3"></img>
<img alt="cover" loading="lazy" class="splash-img" src="/static/assets/images/{{SITE_NAME}}/cover.webp?a=1004"></img>
</div>
</div>

View File

@ -65,7 +65,7 @@
{% if p.award_count("wholesome") > 1 %}
<marquee class="seal" scrollamount=10 behavior="alternate" direction="down" height="100%">
<marquee direction="right" scrollamount=10 behavior="alternate" width="100%">
<img alt=":#marseywholesome:" class="sealimg" src="/static/assets/images/emojis/marseywholesome.webp?a=3">
<img alt=":#marseywholesome:" class="sealimg" src="/static/assets/images/emojis/marseywholesome.webp?a=1004">
</marquee>
</marquee>
{% endif %}
@ -73,7 +73,7 @@
{% if p.award_count("wholesome") > 2 %}
<marquee class="seal" scrollamount=10 behavior="alternate" direction="up" height="100%">
<marquee direction="left" scrollamount=10 behavior="alternate" width="100%">
<img alt=":#marseywholesome:" class="sealimg" src="/static/assets/images/emojis/marseywholesome.webp?a=3">
<img alt=":#marseywholesome:" class="sealimg" src="/static/assets/images/emojis/marseywholesome.webp?a=1004">
</marquee>
</marquee>
{% endif %}
@ -81,7 +81,7 @@
{% if p.award_count("wholesome") > 3 %}
<marquee class="seal" scrollamount=10 behavior="alternate" direction="down" height="100%">
<marquee direction="left" scrollamount=10 behavior="alternate" width="100%">
<img alt=":#marseywholesome:" class="sealimg" src="/static/assets/images/emojis/marseywholesome.webp?a=3">
<img alt=":#marseywholesome:" class="sealimg" src="/static/assets/images/emojis/marseywholesome.webp?a=1004">
</marquee>
</marquee>
{% endif %}
@ -118,25 +118,25 @@
</style>
<marquee class="train train1" direction="left" scrollamount=10 width="100%">
<img alt=":#marseytrain:" class="trainimg mirrored" src="/static/assets/images/emojis/marseytrain.webp?a=3">
<img alt=":#marseytrain:" class="trainimg mirrored" src="/static/assets/images/emojis/marseytrain.webp?a=1004">
</marquee>
{% endif %}
{% if p.award_count("train") > 1 %}
<marquee class="train train2" direction="right" scrollamount=10 width="100%">
<img alt=":#marseytrain:" class="trainimg" src="/static/assets/images/emojis/marseytrain.webp?a=3">
<img alt=":#marseytrain:" class="trainimg" src="/static/assets/images/emojis/marseytrain.webp?a=1004">
</marquee>
{% endif %}
{% if p.award_count("train") > 2 %}
<marquee class="train train3" direction="left" scrollamount=10 width="100%">
<img alt=":#marseytrain:" class="trainimg mirrored" src="/static/assets/images/emojis/marseytrain.webp?a=3">
<img alt=":#marseytrain:" class="trainimg mirrored" src="/static/assets/images/emojis/marseytrain.webp?a=1004">
</marquee>
{% endif %}
{% if p.award_count("train") > 3 %}
<marquee class="train train4" direction="right" scrollamount=10 width="100%">
<img alt=":#marseytrain:" class="trainimg" src="/static/assets/images/emojis/marseytrain.webp?a=3">
<img alt=":#marseytrain:" class="trainimg" src="/static/assets/images/emojis/marseytrain.webp?a=1004">
</marquee>
{% endif %}
@ -367,7 +367,7 @@
{% if p.active_flags %}<a class="btn btn-primary" role="button" 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.verifiedcolor %}#{{p.author.verifiedcolor}}{% else %}#1DA1F2{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="{{p.author.verified}}"></i>
{% endif %}
<a class="user-name text-decoration-none" onclick='popclick({{p.author.json_popover(v) | tojson}})' data-bs-placement="bottom" data-bs-toggle="popover" data-bs-trigger="focus" data-content-id="popover" role="button" tabindex="0" style="color: #{{p.author.namecolor}}; font-weight: bold;" class="user-name"><img alt="@{{p.author.username}}'s profile picture" 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 request.host == 'rdrama.net' %}class="mod"{% endif %}>{{p.author.username}}</span></a>{% if p.author.customtitle %}&nbsp;<bdi style="color: #{{p.author.titlecolor}}">&nbsp;{% if p.author.quadrant %}<img alt="{{p.author.quadrant}} quadrant" loading="lazy" height="20" src="/static/assets/images/quadrants/{{p.author.quadrant}}.webp?a=3">{% endif %}{{p.author.customtitle | safe}}</bdi>{% endif %}
<a class="user-name text-decoration-none" onclick='popclick({{p.author.json_popover(v) | tojson}})' data-bs-placement="bottom" data-bs-toggle="popover" data-bs-trigger="focus" data-content-id="popover" role="button" tabindex="0" style="color: #{{p.author.namecolor}}; font-weight: bold;" class="user-name"><img alt="@{{p.author.username}}'s profile picture" 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 request.host == 'rdrama.net' %}class="mod"{% endif %}>{{p.author.username}}</span></a>{% if p.author.customtitle %}&nbsp;<bdi style="color: #{{p.author.titlecolor}}">&nbsp;{% if p.author.quadrant %}<img alt="{{p.author.quadrant}} quadrant" loading="lazy" height="20" src="/static/assets/images/quadrants/{{p.author.quadrant}}.webp?a=1004">{% endif %}{{p.author.customtitle | safe}}</bdi>{% endif %}
<span data-bs-toggle="tooltip" data-bs-placement="bottom" id="timestamp" onmouseover="timestamp('timestamp','{{p.created_utc}}')">&nbsp;{{p.age_string}}</span>
({% if p.is_image %}image post{% elif p.is_video %}video post{% elif p.realurl(v) %}<a href="/search/posts/?q=domain%3A{{p.domain}}&sort=new&t=all" {% if not v or v.newtabexternal %}target="_blank"{% endif %}>{{p.domain}}</a>{% else %}text post{% endif %})

View File

@ -63,11 +63,9 @@
{% for p in listing %}
<script>
(() => {
{% if not v or v.highlightcomments %}
showNewCommentCounts('{{p.id}}', {{p.comment_count}})
{% endif %}
})()
{% if not v or v.highlightcomments %}
showNewCommentCounts('{{p.id}}', {{p.comment_count}})
{% endif %}
</script>
{% set ups=p.upvotes %}
@ -135,7 +133,7 @@
<div style="z-index: 3;">
{% if p.club and not (v and (v.paid_dues or v.id == p.author_id)) %}
<img alt="post thumnail" loading="lazy" src="/static/assets/images/emojis/marseyglow.webp" class="post-img">
<img alt="post thumnail" loading="lazy" src="/static/assets/images/emojis/marseyglow.webp?a=1004" class="post-img">
{% elif not p.url %}
<a {% if v and v.newtab and not g.webview %}target="_blank"{% endif %} href="{{p.permalink}}">
<img alt="post thumnail" loading="lazy" src="{{p.thumb_url}}" class="post-img">
@ -191,7 +189,7 @@
{% if p.active_flags %}<a class="btn btn-primary" role="button" 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.verifiedcolor %}#{{p.author.verifiedcolor}}{% else %}#1DA1F2{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="{{p.author.verified}}"></i>
{% endif %}
<a class="user-name text-decoration-none" onclick='popclick({{p.author.json_popover(v) | tojson}})' data-bs-placement="bottom" data-bs-toggle="popover" data-bs-trigger="focus" data-content-id="popover" role="button" tabindex="0" style="color: #{{p.author.namecolor}}; font-weight: bold;"><img alt="@{{p.author.profile_url}}'s profile picture" 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 request.host == 'rdrama.net' %}class="mod"{% endif %}>{{p.author.username}}</span></a>{% if p.author.customtitle %}<bdi style="color: #{{p.author.titlecolor}}">&nbsp;&nbsp;{% if p.author.quadrant %}<img alt="{{p.author.quadrant}} quadrant" loading="lazy" height="20" src="/static/assets/images/quadrants/{{p.author.quadrant}}.webp?a=3">{% endif %}{{p.author.customtitle | safe}}</bdi>{% endif %}
<a class="user-name text-decoration-none" onclick='popclick({{p.author.json_popover(v) | tojson}})' data-bs-placement="bottom" data-bs-toggle="popover" data-bs-trigger="focus" data-content-id="popover" role="button" tabindex="0" style="color: #{{p.author.namecolor}}; font-weight: bold;"><img alt="@{{p.author.profile_url}}'s profile picture" 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 request.host == 'rdrama.net' %}class="mod"{% endif %}>{{p.author.username}}</span></a>{% if p.author.customtitle %}<bdi style="color: #{{p.author.titlecolor}}">&nbsp;&nbsp;{% if p.author.quadrant %}<img alt="{{p.author.quadrant}} quadrant" loading="lazy" height="20" src="/static/assets/images/quadrants/{{p.author.quadrant}}.webp?a=1004">{% endif %}{{p.author.customtitle | safe}}</bdi>{% endif %}
<span data-bs-toggle="tooltip" data-bs-placement="bottom" onmouseover="timestamp('timestamp-{{p.id}}','{{p.created_utc}}')" id="timestamp-{{p.id}}">&nbsp;{{p.age_string}}</span>
&nbsp;
({% if p.is_image %}image post{% elif p.is_video %}video post{% elif p.realurl(v) %}<a href="/search/posts/?q=domain%3A{{p.domain}}&sort=new&t=all" {% if v and v.newtab and not g.webview %}target="_blank"{% endif %}>{{p.domain}}</a>{% else %}text post{% endif %})

View File

@ -26,7 +26,7 @@
{% block stylesheets %}
{% if v %}
<style>:root{--primary:#{{v.themecolor}}}</style>
<link rel="stylesheet" href="/static/assets/css/main.css?a=78"><link rel="stylesheet" href="/static/assets/css/{{v.theme}}.css?a=11">
<link rel="stylesheet" href="/static/assets/css/main.css?a=83"><link rel="stylesheet" href="/static/assets/css/{{v.theme}}.css?a=11">
{% if v.agendaposter %}
<style>
html {
@ -50,7 +50,7 @@
{% endif %}
{% else %}
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
<link rel="stylesheet" href="/static/assets/css/main.css?a=78">
<link rel="stylesheet" href="/static/assets/css/main.css?a=83">
<link rel="stylesheet" href="/static/assets/css/{{'DEFAULT_THEME' | app_config}}.css?a=3">
{% endif %}
{% endblock %}

View File

@ -0,0 +1,42 @@
{% extends "default.html" %}
{% block PseudoSubmitForm %}{% endblock %}
{% block sortnav %}{% endblock %}
{% block content %}
<pre></pre>
<div class="row no-gutters {% if listing %}mt-md-3{% elif not listing %}my-md-3{% endif %}">
<div class="col-12 px-3">
<div class="posts" id="posts">
{% include "comments.html" %}
</div>
</div>
</div>
{% endblock %}
{% block pagenav %}
<nav aria-label="Page navigation">
<ul class="pagination pagination-sm mb-0">
{% if page>1 %}
<li class="page-item">
<small><a class="page-link" href="?page={{page-1}}" tabindex="-1">Prev</a></small>
</li>
{% else %}
<li class="page-item disabled"><span class="page-link">Prev</span></li>
{% endif %}
{% if next_exists %}
<li class="page-item">
<small><a class="page-link" href="?page={{page+1}}">Next</a></small>
</li>
{% else %}
<li class="page-item disabled"><span class="page-link">Next</span></li>
{% endif %}
</ul>
</nav>
{% endblock %}

View File

@ -95,7 +95,7 @@
</div>
</div>
{% if u.customtitle %}<p class="font-weight-bolder" style="color: #{{u.titlecolor}}">{% if u.quadrant %}<img alt="{{u.quadrant}} quadrant" loading="lazy" height="20" src="/static/assets/images/quadrants/{{u.quadrant}}.webp?a=3">{% endif %}{{u.customtitle | safe}}</p>
{% if u.customtitle %}<p class="font-weight-bolder" style="color: #{{u.titlecolor}}">{% if u.quadrant %}<img alt="{{u.quadrant}} quadrant" loading="lazy" height="20" src="/static/assets/images/quadrants/{{u.quadrant}}.webp?a=1004">{% endif %}{{u.customtitle | safe}}</p>
{% else %}<pre></pre>
{% endif %}
@ -184,7 +184,7 @@
&nbsp;
<pre class="btn btn-secondary format d-inline-block m-0 fas fa-smile-beam" onclick="loadEmojis('input-message')" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Add Emoji"></pre>
&nbsp;
<input autocomplete="off" type="submit" value="Submit" class="btn btn-primary mt-3">
<input autocomplete="off" type="submit" value="Submit" class="btn btn-primary">
</form>
<div id="message-preview" class="preview-edit mt-2"></div>
@ -368,7 +368,7 @@
{% if v and v.has_follower(u) and not v.is_nofollow %}
<span class="followsyou badge badge-secondary text-small align-middle mx-1">Follows you</span>
{% endif %}
{% if u.customtitle %}<p style="color: #{{u.titlecolor}}">{% if u.quadrant %}<img alt="@{{u.quadrant}} quadrant" loading="lazy" height="20" src="/static/assets/images/quadrants/{{u.quadrant}}.webp?a=3">{% endif %}{{u.customtitle | safe}}</p>
{% if u.customtitle %}<p style="color: #{{u.titlecolor}}">{% if u.quadrant %}<img alt="@{{u.quadrant}} quadrant" loading="lazy" height="20" src="/static/assets/images/quadrants/{{u.quadrant}}.webp?a=1004">{% endif %}{{u.customtitle | safe}}</p>
{% else %}
<pre></pre>
{% endif %}
@ -473,7 +473,7 @@
&nbsp;
<pre class="btn btn-secondary format d-inline-block m-0 fas fa-smile-beam" onclick="loadEmojis('input-message-mobile')" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Add Emoji"></pre>
&nbsp;
<input autocomplete="off" type="submit" value="Submit" class="btn btn-primary mt-3">
<input autocomplete="off" type="submit" value="Submit" class="btn btn-primary">
</form>
<div id="message-preview-mobile" class="preview-edit my-3"></div>
@ -730,7 +730,7 @@
</style>
{% if v %}
{% if v and v.id != u.id and '/comments' not in request.path %}
{% include "emoji_modal.html" %}
{% endif %}