Merge branch 'master' into mistletoe
BIN
files/assets/images/emojis/autism.webp
Normal file
After Width: | Height: | Size: 72 KiB |
BIN
files/assets/images/emojis/bruh.webp
Normal file
After Width: | Height: | Size: 6.5 KiB |
BIN
files/assets/images/emojis/clueless.webp
Normal file
After Width: | Height: | Size: 6.8 KiB |
BIN
files/assets/images/emojis/doot.webp
Normal file
After Width: | Height: | Size: 103 KiB |
BIN
files/assets/images/emojis/idhitit.webp
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
files/assets/images/emojis/marseybadluck.webp
Normal file
After Width: | Height: | Size: 6.1 KiB |
BIN
files/assets/images/emojis/marseyblackfacexmas.webp
Normal file
After Width: | Height: | Size: 8.6 KiB |
BIN
files/assets/images/emojis/marseycensored.webp
Normal file
After Width: | Height: | Size: 169 KiB |
BIN
files/assets/images/emojis/marseycherokee.webp
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
files/assets/images/emojis/marseychristmasbulb.webp
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
files/assets/images/emojis/marseycleonpeterson.webp
Normal file
After Width: | Height: | Size: 6 KiB |
BIN
files/assets/images/emojis/marseycomradehandshake.webp
Normal file
After Width: | Height: | Size: 4.9 KiB |
BIN
files/assets/images/emojis/marseycrucified.webp
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
files/assets/images/emojis/marseydeadhorse.webp
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
files/assets/images/emojis/marseyeldritch2.webp
Normal file
After Width: | Height: | Size: 4.7 KiB |
BIN
files/assets/images/emojis/marseyfattie.webp
Normal file
After Width: | Height: | Size: 8.7 KiB |
BIN
files/assets/images/emojis/marseyfrozenchosen.webp
Normal file
After Width: | Height: | Size: 7.1 KiB |
BIN
files/assets/images/emojis/marseyglowaward.webp
Normal file
After Width: | Height: | Size: 199 KiB |
BIN
files/assets/images/emojis/marseyhappytears.webp
Normal file
After Width: | Height: | Size: 9 KiB |
BIN
files/assets/images/emojis/marseyimposter.webp
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
files/assets/images/emojis/marseykweenxmas.webp
Normal file
After Width: | Height: | Size: 8.6 KiB |
BIN
files/assets/images/emojis/marseylaptop.webp
Normal file
After Width: | Height: | Size: 5 KiB |
BIN
files/assets/images/emojis/marseyliquidator.webp
Normal file
After Width: | Height: | Size: 8 KiB |
BIN
files/assets/images/emojis/marseynoyouglow.webp
Normal file
After Width: | Height: | Size: 157 KiB |
BIN
files/assets/images/emojis/marseyparty1.webp
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
files/assets/images/emojis/marseyparty2.webp
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
files/assets/images/emojis/marseyparty3.webp
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
files/assets/images/emojis/marseyraging.webp
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
files/assets/images/emojis/marseyrare.webp
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
files/assets/images/emojis/marseyreindeer.webp
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
files/assets/images/emojis/marseyreindeer2.webp
Normal file
After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
BIN
files/assets/images/emojis/marseyroo.webp
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
files/assets/images/emojis/marseysanta.webp
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
files/assets/images/emojis/marseysanta2.webp
Normal file
After Width: | Height: | Size: 7.1 KiB |
BIN
files/assets/images/emojis/marseysteer.webp
Normal file
After Width: | Height: | Size: 101 KiB |
BIN
files/assets/images/emojis/marseysuffragette.webp
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
files/assets/images/emojis/soymad.webp
Normal file
After Width: | Height: | Size: 5.9 KiB |
|
@ -392,7 +392,15 @@ class Comment(Base):
|
||||||
@lazy
|
@lazy
|
||||||
def ordered_flags(self): return self.flags.order_by(CommentFlag.id).all()
|
def ordered_flags(self): return self.flags.order_by(CommentFlag.id).all()
|
||||||
|
|
||||||
|
def options_html(self, v):
|
||||||
|
html = ""
|
||||||
|
for o in self.options:
|
||||||
|
html += f'<div class="custom-control"><input type="checkbox" class="custom-control-input" id="{o.id}" name="option"'
|
||||||
|
if o.poll_voted(v): html += " checked"
|
||||||
|
html += f''' onchange="poll_vote('{o.id}', '{self.id}')"><label class="custom-control-label" for="{o.id}">{o.body_html}<span class="presult-{self.id}'''
|
||||||
|
if not self.total_poll_voted(v): html += ' d-none'
|
||||||
|
html += f'"> - <a href="/votes?link=t3_{o.id}"><span id="poll-{o.id}">{o.upvotes}</span> votes</a></span></label></div><pre></pre>'
|
||||||
|
return html
|
||||||
|
|
||||||
class Notification(Base):
|
class Notification(Base):
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ from .clients import *
|
||||||
from files.__main__ import Base, cache
|
from files.__main__ import Base, cache
|
||||||
from files.helpers.security import *
|
from files.helpers.security import *
|
||||||
import random
|
import random
|
||||||
from os import environ, remove
|
from os import environ, remove, path
|
||||||
|
|
||||||
site = environ.get("DOMAIN").strip()
|
site = environ.get("DOMAIN").strip()
|
||||||
site_name = environ.get("SITE_NAME").strip()
|
site_name = environ.get("SITE_NAME").strip()
|
||||||
|
@ -466,18 +466,29 @@ class User(Base):
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def ban(self, admin=None, reason=None, days=0):
|
def deletepfp(self):
|
||||||
|
if self.highres and '/images/' in self.highres:
|
||||||
|
image = '/images/' + self.highres.split('/images/')[1]
|
||||||
|
if path.exists(image): remove(image)
|
||||||
|
if self.profileurl and '/images/' in self.profileurl:
|
||||||
|
image = '/images/' + self.profileurl.split('/images/')[1]
|
||||||
|
if path.exists(image): remove(image)
|
||||||
|
self.highres = None
|
||||||
|
self.profileurl = None
|
||||||
|
|
||||||
|
def deletebanner(self):
|
||||||
|
if self.bannerurl and '/images/' in self.bannerurl:
|
||||||
|
image = '/images/' + self.bannerurl.split('/images/')[1]
|
||||||
|
if path.exists(image): remove(image)
|
||||||
|
self.bannerurl = None
|
||||||
|
|
||||||
|
def ban(self, admin=None, reason=None, days=0):
|
||||||
if days > 0:
|
if days > 0:
|
||||||
ban_time = int(time.time()) + (days * 86400)
|
ban_time = int(time.time()) + (days * 86400)
|
||||||
self.unban_utc = ban_time
|
self.unban_utc = ban_time
|
||||||
else:
|
else:
|
||||||
if self.highres and '/images/' in self.highres: remove('/images/' + self.highres.split('/images/')[1])
|
self.deletepfp()
|
||||||
if self.profileurl and '/images/' in self.profileurl: remove('/images/' + self.profileurl.split('/images/')[1])
|
self.deletebanner()
|
||||||
if self.bannerurl and '/images/' in self.bannerurl: remove('/images/' + self.bannerurl.split('/images/')[1])
|
|
||||||
|
|
||||||
self.bannerurl = None
|
|
||||||
self.profileurl = None
|
|
||||||
if self.discord_id: remove_user(self)
|
if self.discord_id: remove_user(self)
|
||||||
|
|
||||||
self.is_banned = admin.id if admin else AUTOJANNY_ID
|
self.is_banned = admin.id if admin else AUTOJANNY_ID
|
||||||
|
|
|
@ -53,8 +53,8 @@ SLURS = {
|
||||||
"kill yourself": "keep yourself safe",
|
"kill yourself": "keep yourself safe",
|
||||||
"kys": "keep yourself safe",
|
"kys": "keep yourself safe",
|
||||||
"kyle": "Kylie",
|
"kyle": "Kylie",
|
||||||
"nig": "🏀",
|
"nig": "BIPOC",
|
||||||
"nigger": "🏀",
|
"nigger": "BIPOC",
|
||||||
"rapist": "male feminist",
|
"rapist": "male feminist",
|
||||||
"steve akins": "penny verity oaken",
|
"steve akins": "penny verity oaken",
|
||||||
"trannie": "🚂🚃🚃",
|
"trannie": "🚂🚃🚃",
|
||||||
|
|
|
@ -165,26 +165,28 @@ def sanitize(sanitized, noimages=False):
|
||||||
|
|
||||||
if start in sanitized and end in sanitized and start in sanitized.split(end)[0] and end in sanitized.split(start)[1]: sanitized = sanitized.replace(start, '<span class="spoiler">').replace(end, '</span>')
|
if start in sanitized and end in sanitized and start in sanitized.split(end)[0] and end in sanitized.split(start)[1]: sanitized = sanitized.replace(start, '<span class="spoiler">').replace(end, '</span>')
|
||||||
|
|
||||||
for i in re.finditer("[^a]>\s*(:!?\w+:\s*)+<\/", sanitized):
|
for i in re.finditer("[^a]>\s*(:[!#]?\w+:\s*)+<\/", sanitized):
|
||||||
old = i.group(0)
|
old = i.group(0)
|
||||||
if 'marseylong1' in old or 'marseylong2' in old or 'marseyllama1' in old or 'marseyllama2' in old: new = old.lower().replace(">", " class='mb-0'>")
|
if 'marseylong1' in old or 'marseylong2' in old or 'marseyllama1' in old or 'marseyllama2' in old: new = old.lower().replace(">", " class='mb-0'>")
|
||||||
else: new = old.lower()
|
else: new = old.lower()
|
||||||
for i in re.finditer('(?<!"):([^ ]{1,30}?):', new):
|
for i in re.finditer('(?<!"):([^ ]{1,30}?):', new):
|
||||||
emoji = i.group(1).lower()
|
emoji = i.group(1).lower()
|
||||||
if emoji.startswith("!"):
|
if emoji.startswith("!"):
|
||||||
emoji = emoji[1:]
|
classes = 'class="bigemoji mirrored" '
|
||||||
if path.isfile(f'./files/assets/images/emojis/{emoji}.webp'):
|
remoji = emoji[1:]
|
||||||
new = re.sub(f'(?<!"):!{emoji}:', f'<img loading="lazy" data-bs-toggle="tooltip" alt=":!{emoji}:" title=":!{emoji}:" delay="0" class="bigemoji mirrored" src="http://{site}/assets/images/emojis/{emoji}.webp" >', new)
|
elif emoji.startswith("#"):
|
||||||
|
classes = ""
|
||||||
if emoji in session["favorite_emojis"]: session["favorite_emojis"][emoji] += 1
|
remoji = emoji[1:]
|
||||||
else: session["favorite_emojis"][emoji] = 1
|
else:
|
||||||
|
classes = 'class="bigemoji" '
|
||||||
|
remoji = emoji
|
||||||
|
|
||||||
elif path.isfile(f'./files/assets/images/emojis/{emoji}.webp'):
|
if path.isfile(f'./files/assets/images/emojis/{remoji}.webp'):
|
||||||
new = re.sub(f'(?<!"):{emoji}:', f'<img loading="lazy" data-bs-toggle="tooltip" alt=":{emoji}:" title=":{emoji}:" delay="0" class="bigemoji" src="http://{site}/assets/images/emojis/{emoji}.webp" >', new)
|
new = re.sub(f'(?<!"):{emoji}:', f'<img loading="lazy" data-bs-toggle="tooltip" alt=":{emoji}:" title=":{emoji}:" delay="0" {classes}src="http://{site}/assets/images/emojis/{remoji}.webp" >', new)
|
||||||
|
|
||||||
|
if remoji in session["favorite_emojis"]: session["favorite_emojis"][remoji] += 1
|
||||||
|
else: session["favorite_emojis"][remoji] = 1
|
||||||
|
|
||||||
if emoji in session["favorite_emojis"]: session["favorite_emojis"][emoji] += 1
|
|
||||||
else: session["favorite_emojis"][emoji] = 1
|
|
||||||
|
|
||||||
sanitized = sanitized.replace(old, new)
|
sanitized = sanitized.replace(old, new)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -754,14 +754,9 @@ def ban_user(user_id, v):
|
||||||
|
|
||||||
if user.admin_level >= v.admin_level: abort(403)
|
if user.admin_level >= v.admin_level: abort(403)
|
||||||
|
|
||||||
if 'form' in request.values:
|
days = float(request.values.get("days")) if request.values.get('days') else 0
|
||||||
days = float(request.values.get("days")) if request.values.get('days') else 0
|
reason = sanitize(request.values.get("reason", ""))[:256]
|
||||||
reason = sanitize(request.values.get("reason", ""))[:256]
|
message = request.values.get("reason", "").strip()[:256]
|
||||||
message = request.values.get("reason", "").strip()[:256]
|
|
||||||
else:
|
|
||||||
days = float(request.values.get("days")) if request.values.get('days') else 0
|
|
||||||
reason = sanitize(request.values.get("reason", ""))[:256]
|
|
||||||
message = request.values.get("reason", "").strip()[:256]
|
|
||||||
|
|
||||||
if not user: abort(400)
|
if not user: abort(400)
|
||||||
|
|
||||||
|
|
|
@ -803,7 +803,7 @@ def award_comment(cid, v):
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def admin_userawards_get(v):
|
def admin_userawards_get(v):
|
||||||
|
|
||||||
if request.host == 'rdrama.net' and v.admin_level != 3: return render_template("admin/awards.html", awards=list(AWARDS3.values()), v=v)
|
if v.admin_level != 3: return render_template("admin/awards.html", awards=list(AWARDS3.values()), v=v)
|
||||||
return render_template("admin/awards.html", awards=list(AWARDS.values()), v=v)
|
return render_template("admin/awards.html", awards=list(AWARDS.values()), v=v)
|
||||||
|
|
||||||
@app.post("/admin/awards")
|
@app.post("/admin/awards")
|
||||||
|
@ -850,5 +850,5 @@ def admin_userawards_post(v):
|
||||||
|
|
||||||
g.db.commit()
|
g.db.commit()
|
||||||
|
|
||||||
if request.host == 'rdrama.net' and v.admin_level != 3: return render_template("admin/awards.html", awards=list(AWARDS3.values()), v=v)
|
if v.admin_level != 3: return render_template("admin/awards.html", awards=list(AWARDS3.values()), v=v)
|
||||||
return render_template("admin/awards.html", awards=list(AWARDS.values()), v=v)
|
return render_template("admin/awards.html", awards=list(AWARDS.values()), v=v)
|
|
@ -646,6 +646,18 @@ def edit_comment(cid, v):
|
||||||
body = body.replace('I ', f'@{v.username} ')
|
body = body.replace('I ', f'@{v.username} ')
|
||||||
body = censor_slurs2(body).upper().replace(' ME ', f' @{v.username} ')
|
body = censor_slurs2(body).upper().replace(' ME ', f' @{v.username} ')
|
||||||
|
|
||||||
|
if not c.options:
|
||||||
|
for i in re.finditer('\s*\$\$([^\$\n]+)\$\$\s*', body):
|
||||||
|
body = body.replace(i.group(0), "")
|
||||||
|
c_option = Comment(author_id=AUTOPOLLER_ID,
|
||||||
|
parent_submission=c.parent_submission,
|
||||||
|
parent_comment_id=c.id,
|
||||||
|
level=c.level+1,
|
||||||
|
body_html=filter_title(i.group(1)),
|
||||||
|
upvotes=0
|
||||||
|
)
|
||||||
|
g.db.add(c_option)
|
||||||
|
|
||||||
body_html = sanitize(CustomRenderer().render(mistletoe.Document(body)))
|
body_html = sanitize(CustomRenderer().render(mistletoe.Document(body)))
|
||||||
|
|
||||||
if v.marseyawarded and len(list(re.finditer('>[^<\s+]|[^>\s+]<', body_html))) > 0: return {"error":"You can only type marseys!"}, 403
|
if v.marseyawarded and len(list(re.finditer('>[^<\s+]|[^>\s+]<', body_html))) > 0: return {"error":"You can only type marseys!"}, 403
|
||||||
|
@ -816,7 +828,7 @@ def edit_comment(cid, v):
|
||||||
|
|
||||||
g.db.commit()
|
g.db.commit()
|
||||||
|
|
||||||
return c.body_html
|
return c.body_html + c.options_html(v)
|
||||||
|
|
||||||
|
|
||||||
@app.post("/delete/comment/<cid>")
|
@app.post("/delete/comment/<cid>")
|
||||||
|
|
|
@ -275,6 +275,17 @@ def edit_post(pid, v):
|
||||||
body = body.replace('I ', f'@{v.username} ')
|
body = body.replace('I ', f'@{v.username} ')
|
||||||
body = censor_slurs2(body).upper().replace(' ME ', f' @{v.username} ')
|
body = censor_slurs2(body).upper().replace(' ME ', f' @{v.username} ')
|
||||||
|
|
||||||
|
if not p.options.count():
|
||||||
|
for i in re.finditer('\s*\$\$([^\$\n]+)\$\$\s*', body):
|
||||||
|
body = body.replace(i.group(0), "")
|
||||||
|
c = Comment(author_id=AUTOPOLLER_ID,
|
||||||
|
parent_submission=p.id,
|
||||||
|
level=1,
|
||||||
|
body_html=filter_title(i.group(1)),
|
||||||
|
upvotes=0
|
||||||
|
)
|
||||||
|
g.db.add(c)
|
||||||
|
|
||||||
body_html = sanitize(CustomRenderer().render(mistletoe.Document(body)))
|
body_html = sanitize(CustomRenderer().render(mistletoe.Document(body)))
|
||||||
|
|
||||||
bans = filter_comment_html(body_html)
|
bans = filter_comment_html(body_html)
|
||||||
|
|
|
@ -504,7 +504,7 @@ def gumroad(v):
|
||||||
|
|
||||||
if v.email not in emails: return {"error": "Email not found"}, 404
|
if v.email not in emails: return {"error": "Email not found"}, 404
|
||||||
|
|
||||||
response = response[0]
|
response = requests.get('https://api.gumroad.com/v2/sales', data=data, timeout=5).json()["sales"][0]
|
||||||
tier = tiers[response["variants_and_quantity"]]
|
tier = tiers[response["variants_and_quantity"]]
|
||||||
if v.patron == tier: return {"error": f"{patron} rewards already claimed"}, 400
|
if v.patron == tier: return {"error": f"{patron} rewards already claimed"}, 400
|
||||||
|
|
||||||
|
@ -762,13 +762,11 @@ def settings_images_banner(v):
|
||||||
@validate_formkey
|
@validate_formkey
|
||||||
def settings_delete_profile(v):
|
def settings_delete_profile(v):
|
||||||
|
|
||||||
if v.highres and '/images/' in v.highres: os.remove('/images/' + v.highres.split('/images/')[1])
|
if v.profileurl or v.highres:
|
||||||
if v.profileurl and '/images/' in v.profileurl: os.remove('/images/' + v.profileurl.split('/images/')[1])
|
v.deletepfp()
|
||||||
|
g.db.add(v)
|
||||||
|
g.db.commit()
|
||||||
|
|
||||||
v.highres = None
|
|
||||||
v.profileurl = None
|
|
||||||
g.db.add(v)
|
|
||||||
g.db.commit()
|
|
||||||
return render_template("settings_profile.html", v=v,
|
return render_template("settings_profile.html", v=v,
|
||||||
msg="Profile picture successfully removed.")
|
msg="Profile picture successfully removed.")
|
||||||
|
|
||||||
|
@ -779,8 +777,7 @@ def settings_delete_profile(v):
|
||||||
def settings_delete_banner(v):
|
def settings_delete_banner(v):
|
||||||
|
|
||||||
if v.bannerurl:
|
if v.bannerurl:
|
||||||
if '/images/' in v.bannerurl: os.remove('/images/' + v.bannerurl.split('/images/')[1])
|
v.deletebanner()
|
||||||
v.bannerurl = None
|
|
||||||
g.db.add(v)
|
g.db.add(v)
|
||||||
g.db.commit()
|
g.db.commit()
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,7 @@ def api_vote_post(post_id, new, v):
|
||||||
post.author.coins += 1
|
post.author.coins += 1
|
||||||
post.author.truecoins += 1
|
post.author.truecoins += 1
|
||||||
g.db.add(post.author)
|
g.db.add(post.author)
|
||||||
real = bool(v.profileurl) or bool(v.customtitle) or v.namecolor != defaultcolor
|
real = bool(v.profileurl) or bool(v.customtitle) or v.namecolor != defaultcolor and not v.agendaposter and not v.shadowbanned
|
||||||
vote = Vote(user_id=v.id,
|
vote = Vote(user_id=v.id,
|
||||||
vote_type=new,
|
vote_type=new,
|
||||||
submission_id=post_id,
|
submission_id=post_id,
|
||||||
|
@ -169,7 +169,7 @@ def api_vote_comment(comment_id, new, v):
|
||||||
comment.author.coins += 1
|
comment.author.coins += 1
|
||||||
comment.author.truecoins += 1
|
comment.author.truecoins += 1
|
||||||
g.db.add(comment.author)
|
g.db.add(comment.author)
|
||||||
real = bool(v.profileurl) or bool(v.customtitle) or v.namecolor != defaultcolor
|
real = (bool(v.profileurl) or bool(v.customtitle) or v.namecolor != defaultcolor) and not v.agendaposter and not v.shadowbanned
|
||||||
vote = CommentVote(user_id=v.id,
|
vote = CommentVote(user_id=v.id,
|
||||||
vote_type=new,
|
vote_type=new,
|
||||||
comment_id=comment_id,
|
comment_id=comment_id,
|
||||||
|
|
|
@ -29,9 +29,9 @@
|
||||||
<textarea name="body" form="reply" class="comment-box form-control rounded" id="reply-form" aria-label="With textarea" placeholder="Add your comment..." {% if v.longpost %}minlength="280"{% endif %} maxlength="{% if v.bird %}140{% else %}10000{% endif %}" rows="10">{{body}}</textarea>
|
<textarea name="body" form="reply" class="comment-box form-control rounded" id="reply-form" aria-label="With textarea" placeholder="Add your comment..." {% if v.longpost %}minlength="280"{% endif %} maxlength="{% if v.bird %}140{% else %}10000{% endif %}" rows="10">{{body}}</textarea>
|
||||||
|
|
||||||
<div class="comment-format">
|
<div class="comment-format">
|
||||||
<small class="format pl-0"><i class="fas fa-bold" aria-hidden="true" onclick="makeReplyBold()" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Bold"></i></small>
|
<small class="format pl-0"><i class="fas fa-bold" aria-hidden="true" onclick="makeReplyBold()" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Bold"></i></small>
|
||||||
<a class="format" href="javascript:void(0)"><i class="fas fa-italic" aria-hidden="true" onclick="makeReplyItalics()" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Italicize"></i></a>
|
<a class="format" href="javascript:void(0)"><i class="fas fa-italic" aria-hidden="true" onclick="makeReplyItalics()" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Italicize"></i></a>
|
||||||
<a class="format" href="javascript:void(0)"><i class="fas fa-quote-right" aria-hidden="true" onclick="makeReplyQuote()" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Quote"></i></a>
|
<a class="format" href="javascript:void(0)"><i class="fas fa-quote-right" aria-hidden="true" onclick="makeReplyQuote()" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Quote"></i></a>
|
||||||
<a class="format" href="javascript:void(0)"><i class="fas fa-link" aria-hidden="true"></i></small>
|
<a class="format" href="javascript:void(0)"><i class="fas fa-link" aria-hidden="true"></i></small>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -84,7 +84,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script defer src="/assets/js/emoji_modal.js?v=124"></script>
|
<script defer src="/assets/js/emoji_modal.js?v=126"></script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
a.emojitab {
|
a.emojitab {
|
||||||
|
|
|
@ -56,12 +56,17 @@ On {{'SITE_NAME' | app_config}}, you can use Markdown formatting.
|
||||||
<tr>
|
<tr>
|
||||||
<td>Emojis</td>
|
<td>Emojis</td>
|
||||||
<td>:marseylove:</td>
|
<td>:marseylove:</td>
|
||||||
<td><img loading="lazy" data-bs-toggle="tooltip" alt=":marseylove:" title="" data-bs-original-title=":marseylove:" delay="0" height="20" src="/assets/images/emojis/marseylove.webp?v=1"></td>
|
<td><img loading="lazy" data-bs-toggle="tooltip" alt=":marseylove:" data-bs-original-title=":marseylove:" delay="0" height="20" src="/assets/images/emojis/marseylove.webp?v=1"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Mirrored Emojis</td>
|
<td>Mirrored Emojis</td>
|
||||||
<td>:!marseylove:</td>
|
<td>:!marseylove:</td>
|
||||||
<td><img loading="lazy" data-bs-toggle="tooltip" class="mirrored" alt=":!marseylove:" title="" data-bs-original-title=":!marseylove:" delay="0" height="20" src="/assets/images/emojis/marseylove.webp?v=1"></td>
|
<td><img loading="lazy" data-bs-toggle="tooltip" class="mirrored" alt=":!marseylove:" data-bs-original-title=":!marseylove:" delay="0" height="20" src="/assets/images/emojis/marseylove.webp?v=1"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Large Emojis</td>
|
||||||
|
<td>:#marseylove:</td>
|
||||||
|
<td><img loading="lazy" data-bs-toggle="tooltip" class="mirrored" alt=":!marseylove:" data-bs-original-title=":!marseylove:" delay="0" src="/assets/images/emojis/marseylove.webp?v=1"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Poll Options</td>
|
<td>Poll Options</td>
|
||||||
|
|
|
@ -47,12 +47,12 @@
|
||||||
<ul class="navbar-nav ml-auto d-none d-md-flex">
|
<ul class="navbar-nav ml-auto d-none d-md-flex">
|
||||||
|
|
||||||
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
|
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
|
||||||
<a class="nav-link" href="/random/" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Random post"><i class="fas fa-random"></i></a>
|
<a class="nav-link" href="/random/" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Random post"><i class="fas fa-random"></i></a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
{% if v and v.admin_level > 1 %}
|
{% if v and v.admin_level > 1 %}
|
||||||
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
|
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
|
||||||
<a class="nav-link" href="/admin/" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Admin tools"><i class="fas fa-crown{% if v.has_report_queue %} text-success{% endif %}"></i></a>
|
<a class="nav-link" href="/admin/" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Admin tools"><i class="fas fa-crown{% if v.has_report_queue %} text-success{% endif %}"></i></a>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
@ -61,31 +61,31 @@
|
||||||
{% if v.notifications_count %}
|
{% if v.notifications_count %}
|
||||||
|
|
||||||
<li class="nav-item d-flex align-items-center text-center justify-content-center mx-1">
|
<li class="nav-item d-flex align-items-center text-center justify-content-center mx-1">
|
||||||
<a class="nav-link position-relative" href="/notifications{% if v.notifications_count and v.notifications_count == v.post_notifications_count %}?posts=true{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Notifications"><i class="fas fa-bell text-danger"></i><span class="notif-count ml-1" style="padding-left: 4.5px;">{{v.notifications_count}}</span></a>
|
<a class="nav-link position-relative" href="/notifications{% if v.notifications_count and v.notifications_count == v.post_notifications_count %}?posts=true{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Notifications"><i class="fas fa-bell text-danger"></i><span class="notif-count ml-1" style="padding-left: 4.5px;">{{v.notifications_count}}</span></a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
<li class="nav-item d-flex align-items-center text-center justify-content-center mx-1">
|
<li class="nav-item d-flex align-items-center text-center justify-content-center mx-1">
|
||||||
<a class="nav-link" href="/notifications" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Notifications"><i class="fas fa-bell"></i></a>
|
<a class="nav-link" href="/notifications" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Notifications"><i class="fas fa-bell"></i></a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
|
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
|
||||||
<a class="nav-link" href="/submit" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Create post"><i class="fas fa-feather-alt"></i></a>
|
<a class="nav-link" href="/submit" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Create post"><i class="fas fa-feather-alt"></i></a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
|
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
|
||||||
<a class="nav-link" href="/comments" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Comments"><i class="fas fa-comment-dots"></i></a>
|
<a class="nav-link" href="/comments" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Comments"><i class="fas fa-comment-dots"></i></a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
|
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
|
||||||
<a class="nav-link" href="/leaderboard" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Users"><i class="fas fa-trophy"></i></a>
|
<a class="nav-link" href="/leaderboard" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Users"><i class="fas fa-trophy"></i></a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
|
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
|
||||||
<a class="nav-link" href="/shop" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Shop"><i class="fas fa-store"></i></a>
|
<a class="nav-link" href="/shop" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Shop"><i class="fas fa-store"></i></a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="nav-item d-flex align-items-center justify-content-center text-center">
|
<li class="nav-item d-flex align-items-center justify-content-center text-center">
|
||||||
|
@ -96,8 +96,8 @@
|
||||||
<div><img loading="lazy" src="{{v.profile_url}}" class="profile-pic-35"></div>
|
<div><img loading="lazy" src="{{v.profile_url}}" class="profile-pic-35"></div>
|
||||||
<div class="text-left pl-2">
|
<div class="text-left pl-2">
|
||||||
<div style="color: #{{v.namecolor}}" class="text-small font-weight-bold {% if v.patron %}patron{% endif %}"><span {% if v.patron %}class="patron" style="background-color:#{{v.namecolor}};"{% endif %}>{{v.username}}</span></div>
|
<div style="color: #{{v.namecolor}}" class="text-small font-weight-bold {% if v.patron %}patron{% endif %}"><span {% if v.patron %}class="patron" style="background-color:#{{v.namecolor}};"{% endif %}>{{v.username}}</span></div>
|
||||||
<div class="text-small-extra text-primary"><img class="mr-1 ml-1" data-bs-toggle="tooltip" data-bs-placement="bottom" height="13" src="/assets/images/emojis/marseycoin.webp" title="" data-bs-original-title="{{'COINS_NAME' | app_config}}" aria-label="{{'COINS_NAME' | app_config}}"><span id="user-coins-amount">{{v.coins}}</span> {{'COINS_NAME' | app_config}}</div>
|
<div class="text-small-extra text-primary"><img class="mr-1 ml-1" data-bs-toggle="tooltip" data-bs-placement="bottom" height="13" src="/assets/images/emojis/marseycoin.webp" data-bs-original-title="{{'COINS_NAME' | app_config}}" aria-label="{{'COINS_NAME' | app_config}}"><span id="user-coins-amount">{{v.coins}}</span> {{'COINS_NAME' | app_config}}</div>
|
||||||
{% if v.procoins %}<div class="text-small-extra text-primary"><img class="mr-1 ml-1" data-bs-toggle="tooltip" data-bs-placement="bottom" height="13" src="/assets/images/emojis/marseybux.webp" title="" data-bs-original-title="Marseybux" aria-label="Marseybux"><span>{{v.procoins}}</span> Marseybux</div>{% endif %}
|
{% if v.procoins %}<div class="text-small-extra text-primary"><img class="mr-1 ml-1" data-bs-toggle="tooltip" data-bs-placement="bottom" height="13" src="/assets/images/emojis/marseybux.webp" data-bs-original-title="Marseybux" aria-label="Marseybux"><span>{{v.procoins}}</span> Marseybux</div>{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -64,7 +64,7 @@
|
||||||
<input class="form-control" id="post-title" aria-describedby="titleHelpRegister" type="text" name="title" placeholder="Required" value="{{title}}" minlength="1" maxlength="500" required oninput="checkForRequired()">
|
<input class="form-control" id="post-title" aria-describedby="titleHelpRegister" type="text" name="title" placeholder="Required" value="{{title}}" minlength="1" maxlength="500" required oninput="checkForRequired()">
|
||||||
|
|
||||||
<label class="btn btn-secondary format d-inline-block m-0" for="emoji-reply-btn-2">
|
<label class="btn btn-secondary format d-inline-block m-0" for="emoji-reply-btn-2">
|
||||||
<div id="emoji-reply-btn-2" onclick="loadEmojis('post-title')" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Add Emoji"><i class="fas fa-smile-beam"></i></div>
|
<div id="emoji-reply-btn-2" onclick="loadEmojis('post-title')" 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"><i class="fas fa-smile-beam"></i></div>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<div id="urlblock">
|
<div id="urlblock">
|
||||||
|
@ -85,7 +85,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<label for="body" class="mt-3">Text<i class="fas fa-info-circle text-gray-400 ml-1" data-bs-toggle="tooltip" data-bs-placement="top" title="" data-bs-original-title="Uses markdown. Limited to 10000 characters."></i></label>
|
<label for="body" class="mt-3">Text<i class="fas fa-info-circle text-gray-400 ml-1" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-original-title="Uses markdown. Limited to 10000 characters."></i></label>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<textarea form="submitform" id="post-text" class="form-control rounded" aria-label="With textarea" placeholder="Optional if you have a link or an image." rows="7" name="body" oninput="markdown();charLimit('post-text','character-count-submit-text-form');checkForRequired()" {% if v.longpost %}minlength="280"{% endif %} maxlength="{% if v.bird %}140{% else %}10000{% endif %}" required></textarea>
|
<textarea form="submitform" id="post-text" class="form-control rounded" aria-label="With textarea" placeholder="Optional if you have a link or an image." rows="7" name="body" oninput="markdown();charLimit('post-text','character-count-submit-text-form');checkForRequired()" {% if v.longpost %}minlength="280"{% endif %} maxlength="{% if v.bird %}140{% else %}10000{% endif %}" required></textarea>
|
||||||
|
@ -101,21 +101,21 @@
|
||||||
|
|
||||||
<p></p>
|
<p></p>
|
||||||
<small class="btn btn-secondary format d-inline-block m-0">
|
<small class="btn btn-secondary format d-inline-block m-0">
|
||||||
<i class="fas fa-bold" aria-hidden="true" onclick="makeBold('post-text')" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Bold"></i>
|
<i class="fas fa-bold" aria-hidden="true" onclick="makeBold('post-text')" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Bold"></i>
|
||||||
</small>
|
</small>
|
||||||
|
|
||||||
<small class="btn btn-secondary format d-inline-block m-0">
|
<small class="btn btn-secondary format d-inline-block m-0">
|
||||||
<i class="fas fa-italic" aria-hidden="true" onclick="makeItalics('post-text')" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Italicize"></i>
|
<i class="fas fa-italic" aria-hidden="true" onclick="makeItalics('post-text')" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Italicize"></i>
|
||||||
</small>
|
</small>
|
||||||
|
|
||||||
<small class="btn btn-secondary format d-inline-block m-0">
|
<small class="btn btn-secondary format d-inline-block m-0">
|
||||||
<i class="fas fa-quote-right" aria-hidden="true" onclick="makeQuote('post-text')" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Quote"></i>
|
<i class="fas fa-quote-right" aria-hidden="true" onclick="makeQuote('post-text')" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Quote"></i>
|
||||||
</small>
|
</small>
|
||||||
|
|
||||||
<small class="btn btn-secondary format d-inline-block m-0"><span class="font-weight-bolder text-uppercase" aria-hidden="true" onclick="getGif();commentForm('post-text')" data-bs-toggle="modal" data-bs-target="#gifModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Add GIF">GIF</span></small>
|
<small class="btn btn-secondary format d-inline-block m-0"><span class="font-weight-bolder text-uppercase" aria-hidden="true" onclick="getGif();commentForm('post-text')" data-bs-toggle="modal" data-bs-target="#gifModal" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Add GIF">GIF</span></small>
|
||||||
|
|
||||||
<label class="btn btn-secondary format d-inline-block m-0" for="emoji-reply-btn">
|
<label class="btn btn-secondary format d-inline-block m-0" for="emoji-reply-btn">
|
||||||
<div id="emoji-reply-btn" onclick="loadEmojis('post-text')" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Add Emoji"><i class="fas fa-smile-beam"></i></div>
|
<div id="emoji-reply-btn" onclick="loadEmojis('post-text')" 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"><i class="fas fa-smile-beam"></i></div>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<label class="format btn btn-secondary m-0 ml-1 {% if v %}d-inline-block{% else %}d-none{% endif %}" for="file-upload-submit">
|
<label class="format btn btn-secondary m-0 ml-1 {% if v %}d-inline-block{% else %}d-none{% endif %}" for="file-upload-submit">
|
||||||
|
|
|
@ -124,17 +124,17 @@
|
||||||
<h1 class="font-weight-bolder h3 mb-0" style="color: #{{u.namecolor}}"><span {% if u.patron %}class="patron" style="background-color:#{{u.namecolor}};"{% endif %}>{{u.username}}</span></h1>
|
<h1 class="font-weight-bolder h3 mb-0" style="color: #{{u.namecolor}}"><span {% if u.patron %}class="patron" style="background-color:#{{u.namecolor}};"{% endif %}>{{u.username}}</span></h1>
|
||||||
{% if u.username != u.original_username %}
|
{% if u.username != u.original_username %}
|
||||||
<span>
|
<span>
|
||||||
<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>
|
<i class="fad fa-user-tag text-info align-middle ml-2" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Original Username: @{{u.original_username}}"></i>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if u.verified %}<span><i class="fas fa-badge-check align-middle ml-1" style="color:{% if u.verifiedcolor %}#{{u.verifiedcolor}}{% 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.verifiedcolor %}#{{u.verifiedcolor}}{% else %}#1DA1F2{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="{{u.verified}}"></i></span>{% endif %}
|
||||||
{% if u.admin_level > 1 or (u.admin_level == 1 and not(v and v.admin_level > 1)) %}
|
{% if u.admin_level > 1 or (u.admin_level == 1 and not(v and v.admin_level > 1)) %}
|
||||||
<span>
|
<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>
|
<i class="fas fa-broom text-admin align-middle ml-2" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Admin"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif u.admin_level == 1 and v and v.admin_level > 1 %}
|
{% elif u.admin_level == 1 and v and v.admin_level > 1 %}
|
||||||
<span>
|
<span>
|
||||||
<i class="fas fa-broom align-middle ml-2" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Meme Admin"></i>
|
<i class="fas fa-broom align-middle ml-2" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Meme Admin"></i>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if v and v.has_follower(u) %}
|
{% if v and v.has_follower(u) %}
|
||||||
|
@ -173,15 +173,15 @@
|
||||||
|
|
||||||
<div class="font-weight-bolder">
|
<div class="font-weight-bolder">
|
||||||
<span id="profile-coins-amount">{{u.coins}}</span>
|
<span id="profile-coins-amount">{{u.coins}}</span>
|
||||||
<img class="ml-1 mb-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{'COINS_NAME' | app_config}}" height="20" src="/assets/images/emojis/marseycoin.webp?v=1">
|
<img class="ml-1 mb-1" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="{{'COINS_NAME' | app_config}}" height="20" src="/assets/images/emojis/marseycoin.webp?v=1">
|
||||||
|
|
||||||
{% if u.procoins %}
|
{% if u.procoins %}
|
||||||
<span>{{u.procoins}}</span>
|
<span>{{u.procoins}}</span>
|
||||||
<img class="ml-1 mb-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Marseybux" height="20" src="/assets/images/emojis/marseybux.webp?v=1">
|
<img class="ml-1 mb-1" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Marseybux" height="20" src="/assets/images/emojis/marseybux.webp?v=1">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if u.stored_subscriber_count >=1 and not u.is_nofollow %}<a href="/@{{u.username}}/followers">{{u.stored_subscriber_count}} follower{{'s' if u.stored_subscriber_count != 1 else ''}}</a> {% endif %}
|
{% if u.stored_subscriber_count >=1 and not u.is_nofollow %}<a href="/@{{u.username}}/followers">{{u.stored_subscriber_count}} follower{{'s' if u.stored_subscriber_count != 1 else ''}}</a> {% endif %}
|
||||||
joined <span data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{u.created_datetime}}">{{u.created_date}}</span>
|
joined <span data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="{{u.created_datetime}}">{{u.created_date}}</span>
|
||||||
</div>
|
</div>
|
||||||
{% if u.basedcount %}<p class="text-muted">Based Count: {{u.basedcount}}</p>{% endif %}
|
{% if u.basedcount %}<p class="text-muted">Based Count: {{u.basedcount}}</p>{% endif %}
|
||||||
|
|
||||||
|
@ -215,7 +215,7 @@
|
||||||
<p class="text-uppercase my-0" style="font-weight: bold; font-size: 12px;">Awards received</p>
|
<p class="text-uppercase my-0" style="font-weight: bold; font-size: 12px;">Awards received</p>
|
||||||
{% for a in u.received_awards %}
|
{% for a in u.received_awards %}
|
||||||
<span class="d-inline-block mx-1">
|
<span class="d-inline-block mx-1">
|
||||||
<i class="{{a['icon']}} {{a['color']}} fa-fw" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{a['title']}} Awards received"></i>
|
<i class="{{a['icon']}} {{a['color']}} fa-fw" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="{{a['title']}} Awards received"></i>
|
||||||
x{{a['count']}}
|
x{{a['count']}}
|
||||||
</span>
|
</span>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -248,13 +248,13 @@
|
||||||
<pre></pre>
|
<pre></pre>
|
||||||
<textarea id="input-message" form="message" name="message" rows="3" maxlength="1000" class="form-control b2" required></textarea>
|
<textarea id="input-message" form="message" name="message" rows="3" maxlength="1000" class="form-control b2" required></textarea>
|
||||||
<pre></pre>
|
<pre></pre>
|
||||||
<pre class="btn btn-secondary format d-inline-block m-0 fas fa-bold" aria-hidden="true" onclick="makeBold('input-message')" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Bold"></pre>
|
<pre class="btn btn-secondary format d-inline-block m-0 fas fa-bold" aria-hidden="true" onclick="makeBold('input-message')" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Bold"></pre>
|
||||||
|
|
||||||
<pre class="btn btn-secondary format d-inline-block m-0 fas fa-italic" aria-hidden="true" onclick="makeItalics('input-message')" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Italicize"></pre>
|
<pre class="btn btn-secondary format d-inline-block m-0 fas fa-italic" aria-hidden="true" onclick="makeItalics('input-message')" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Italicize"></pre>
|
||||||
|
|
||||||
<pre class="btn btn-secondary format d-inline-block m-0 fas fa-quote-right" aria-hidden="true" onclick="makeQuote('input-message')" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Quote"></pre>
|
<pre class="btn btn-secondary format d-inline-block m-0 fas fa-quote-right" aria-hidden="true" onclick="makeQuote('input-message')" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Quote"></pre>
|
||||||
|
|
||||||
<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" title="" data-bs-original-title="Add Emoji"></pre>
|
<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>
|
||||||
|
|
||||||
<input type="submit" value="Submit" class="btn btn-primary mt-3">
|
<input type="submit" value="Submit" class="btn btn-primary mt-3">
|
||||||
</form>
|
</form>
|
||||||
|
@ -284,7 +284,7 @@
|
||||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||||
<input id="customtitlebody" type="text" name="title" class="form-control" placeholder='Enter a flair here' value="{% if u.customtitleplain %}{{u.customtitleplain}}{% endif %}">
|
<input id="customtitlebody" type="text" name="title" class="form-control" placeholder='Enter a flair here' value="{% if u.customtitleplain %}{{u.customtitleplain}}{% endif %}">
|
||||||
<div class="d-flex mt-2">
|
<div class="d-flex mt-2">
|
||||||
<a class="format" href="javascript:void(0)"><i class="btn btn-secondary format d-inline-block m-0 fas fa-smile-beam" onclick="loadEmojis('customtitlebody')" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Add Emoji"></i></a>
|
<a class="format" href="javascript:void(0)"><i class="btn btn-secondary format d-inline-block m-0 fas fa-smile-beam" onclick="loadEmojis('customtitlebody')" 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"></i></a>
|
||||||
|
|
||||||
<div class="custom-control custom-checkbox">
|
<div class="custom-control custom-checkbox">
|
||||||
<input type="checkbox" class="custom-control-input" id="locked" name="locked" {% if u.flairchanged %}checked{% endif %}>
|
<input type="checkbox" class="custom-control-input" id="locked" name="locked" {% if u.flairchanged %}checked{% endif %}>
|
||||||
|
@ -383,9 +383,9 @@
|
||||||
<div>
|
<div>
|
||||||
{% for b in u.badges %}
|
{% for b in u.badges %}
|
||||||
{% if b.url %}
|
{% if b.url %}
|
||||||
<a rel="nofollow noopener noreferrer" href="{{b.url}}"><img width="60" loading="lazy" src="{{b.path}}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{b.name}} - {{b.text}}"></a>
|
<a rel="nofollow noopener noreferrer" href="{{b.url}}"><img width="60" loading="lazy" src="{{b.path}}" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="{{b.name}} - {{b.text}}"></a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<img width="60" loading="lazy" src="{{b.path}}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{b.name}} - {{b.text}}">
|
<img width="60" loading="lazy" src="{{b.path}}" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="{{b.name}} - {{b.text}}">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
@ -420,20 +420,20 @@
|
||||||
<h5 style="color:#ff66ac;">BANNED USER{% if u.ban_reason %}: {{u.ban_reason}}{% endif %}</h5>
|
<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 %}
|
{% if u.unban_utc %}<h5 style="color:#ff66ac;">{{u.unban_string}}</h5>{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if u.verified %}<span><i class="fas fa-badge-check align-middle ml-1" style="color:{% if u.verifiedcolor %}#{{u.verifiedcolor}}{% 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.verifiedcolor %}#{{u.verifiedcolor}}{% else %}#1DA1F2{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" 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>
|
<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 %}
|
{% if u.username != u.original_username %}
|
||||||
<span>
|
<span>
|
||||||
<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>
|
<i class="fad fa-user-tag text-info align-middle ml-2" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Original Username: @{{u.original_username}}"></i>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if u.admin_level > 1 or (u.admin_level == 1 and not(v and v.admin_level > 1)) %}
|
{% if u.admin_level > 1 or (u.admin_level == 1 and not(v and v.admin_level > 1)) %}
|
||||||
<span>
|
<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>
|
<i class="fas fa-broom text-admin align-middle ml-2" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Admin"></i>
|
||||||
</span>
|
</span>
|
||||||
{% elif u.admin_level == 1 and v and v.admin_level > 1 %}
|
{% elif u.admin_level == 1 and v and v.admin_level > 1 %}
|
||||||
<span>
|
<span>
|
||||||
<i class="fas fa-broom align-middle ml-2" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Meme Admin"></i>
|
<i class="fas fa-broom align-middle ml-2" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Meme Admin"></i>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if v and v.has_follower(u) and not v.is_nofollow %}
|
{% if v and v.has_follower(u) and not v.is_nofollow %}
|
||||||
|
@ -448,11 +448,11 @@
|
||||||
|
|
||||||
<div class="font-weight-normal">
|
<div class="font-weight-normal">
|
||||||
<span id="profile-coins-amount-mobile" class="font-weight-bold">{{u.coins}}</span>
|
<span id="profile-coins-amount-mobile" class="font-weight-bold">{{u.coins}}</span>
|
||||||
<img class="ml-1 mb-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{'COINS_NAME' | app_config}}" height="15" src="/assets/images/emojis/marseycoin.webp?v=1">
|
<img class="ml-1 mb-1" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="{{'COINS_NAME' | app_config}}" height="15" src="/assets/images/emojis/marseycoin.webp?v=1">
|
||||||
|
|
||||||
{% if u.procoins %}
|
{% if u.procoins %}
|
||||||
<span class="font-weight-bold">{{u.procoins}}</span>
|
<span class="font-weight-bold">{{u.procoins}}</span>
|
||||||
<img class="ml-1 mb-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Marseybux" height="15" src="/assets/images/emojis/marseybux.webp?v=1">
|
<img class="ml-1 mb-1" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Marseybux" height="15" src="/assets/images/emojis/marseybux.webp?v=1">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if u.stored_subscriber_count >=1 and not u.is_nofollow %}<a href="/@{{u.username}}/followers" class="font-weight-bold">{{u.stored_subscriber_count}} follower{{'s' if u.stored_subscriber_count != 1 else ''}}</a> {% endif %}
|
{% if u.stored_subscriber_count >=1 and not u.is_nofollow %}<a href="/@{{u.username}}/followers" class="font-weight-bold">{{u.stored_subscriber_count}} follower{{'s' if u.stored_subscriber_count != 1 else ''}}</a> {% endif %}
|
||||||
|
@ -460,7 +460,7 @@
|
||||||
<br>Based count: {{u.basedcount}}
|
<br>Based count: {{u.basedcount}}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<br>joined <span data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{u.created_datetime}}" class="font-weight-bold">{{u.created_date}}</span>
|
<br>joined <span data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="{{u.created_datetime}}" class="font-weight-bold">{{u.created_date}}</span>
|
||||||
</div>
|
</div>
|
||||||
{% if u.bio_html %}
|
{% if u.bio_html %}
|
||||||
<p class="text-muted text-break">{{u.bio_html | safe}}</p>
|
<p class="text-muted text-break">{{u.bio_html | safe}}</p>
|
||||||
|
@ -481,7 +481,7 @@
|
||||||
<p class="text-uppercase my-0" style="font-weight: bold; font-size: 12px;">Awards received</p>
|
<p class="text-uppercase my-0" style="font-weight: bold; font-size: 12px;">Awards received</p>
|
||||||
{% for a in u.received_awards %}
|
{% for a in u.received_awards %}
|
||||||
<span class="d-inline-block mx-1">
|
<span class="d-inline-block mx-1">
|
||||||
<i class="{{a['icon']}} {{a['color']}} fa-fw" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{a['title']}} Awards received"></i>
|
<i class="{{a['icon']}} {{a['color']}} fa-fw" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="{{a['title']}} Awards received"></i>
|
||||||
x{{a['count']}}
|
x{{a['count']}}
|
||||||
</span>
|
</span>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -491,9 +491,9 @@
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
{% for b in u.badges %}
|
{% for b in u.badges %}
|
||||||
{% if b.url %}
|
{% if b.url %}
|
||||||
<a rel="nofollow noopener noreferrer" href="{{b.url}}"><img width="32" loading="lazy" src="{{b.path}}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{b.name}} - {{b.text}}"></a>
|
<a rel="nofollow noopener noreferrer" href="{{b.url}}"><img width="32" loading="lazy" src="{{b.path}}" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="{{b.name}} - {{b.text}}"></a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<img width="32" loading="lazy" src="{{b.path}}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{b.name}} - {{b.text}}">
|
<img width="32" loading="lazy" src="{{b.path}}" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="{{b.name}} - {{b.text}}">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
@ -530,13 +530,13 @@
|
||||||
<pre></pre>
|
<pre></pre>
|
||||||
<textarea id="input-message-mobile" form="message-mobile" name="message" rows="3" maxlength="1000" class="form-control" required></textarea>
|
<textarea id="input-message-mobile" form="message-mobile" name="message" rows="3" maxlength="1000" class="form-control" required></textarea>
|
||||||
<pre></pre>
|
<pre></pre>
|
||||||
<pre class="btn btn-secondary format d-inline-block m-0 fas fa-bold" aria-hidden="true" onclick="makeBold('input-message-mobile')" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Bold"></pre>
|
<pre class="btn btn-secondary format d-inline-block m-0 fas fa-bold" aria-hidden="true" onclick="makeBold('input-message-mobile')" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Bold"></pre>
|
||||||
|
|
||||||
<pre class="btn btn-secondary format d-inline-block m-0 fas fa-italic" aria-hidden="true" onclick="makeItalics('input-message-mobile')" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Italicize"></pre>
|
<pre class="btn btn-secondary format d-inline-block m-0 fas fa-italic" aria-hidden="true" onclick="makeItalics('input-message-mobile')" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Italicize"></pre>
|
||||||
|
|
||||||
<pre class="btn btn-secondary format d-inline-block m-0 fas fa-quote-right" aria-hidden="true" onclick="makeQuote('input-message-mobile')" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Quote"></pre>
|
<pre class="btn btn-secondary format d-inline-block m-0 fas fa-quote-right" aria-hidden="true" onclick="makeQuote('input-message-mobile')" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Quote"></pre>
|
||||||
|
|
||||||
<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" title="" data-bs-original-title="Add Emoji"></pre>
|
<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>
|
||||||
|
|
||||||
<input type="submit" value="Submit" class="btn btn-primary mt-3">
|
<input type="submit" value="Submit" class="btn btn-primary mt-3">
|
||||||
</form>
|
</form>
|
||||||
|
@ -560,7 +560,7 @@
|
||||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||||
<input id="customtitlebody-mobile" type="text" name="title" class="form-control" placeholder='Enter a flair here' value="{% if u.customtitle %}{{u.customtitle}}{% endif %}">
|
<input id="customtitlebody-mobile" type="text" name="title" class="form-control" placeholder='Enter a flair here' value="{% if u.customtitle %}{{u.customtitle}}{% endif %}">
|
||||||
<div class="d-flex mt-2">
|
<div class="d-flex mt-2">
|
||||||
<a class="format" href="javascript:void(0)"><i class="btn btn-secondary format d-inline-block m-0 fas fa-smile-beam" onclick="loadEmojis('customtitlebody-mobile')" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Add Emoji"></i></a>
|
<a class="format" href="javascript:void(0)"><i class="btn btn-secondary format d-inline-block m-0 fas fa-smile-beam" onclick="loadEmojis('customtitlebody-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"></i></a>
|
||||||
|
|
||||||
<div class="custom-control custom-checkbox">
|
<div class="custom-control custom-checkbox">
|
||||||
<input type="checkbox" class="custom-control-input" id="locked-mobile" name="locked" {% if u.flairchanged %}checked{% endif %}>
|
<input type="checkbox" class="custom-control-input" id="locked-mobile" name="locked" {% if u.flairchanged %}checked{% endif %}>
|
||||||
|
|