Merge branch 'frost' of https://github.com/Aevann1/rDrama into frost

remotes/1693045480750635534/spooky-22
Aevann1 2022-07-22 03:18:23 +02:00
commit 15073496c6
26 changed files with 212 additions and 123 deletions

View File

@ -5594,6 +5594,15 @@ audio, video {
text-decoration: none;
}
#sidebar-lgb--host-notice img {
display: block;
margin: 1.5rem auto 1rem auto;
}
#sidebar-lgb--host-notice a {
display: block;
text-align: center;
}
#sidebar--directory--head {
display: block;
font-size: 1.35rem;

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

View File

@ -50,7 +50,9 @@ function popclick(e) {
popover.getElementsByClassName('pop-banner')[0].src = author["bannerurl"]
popover.getElementsByClassName('pop-picture')[0].src = author["profile_url"]
popover.getElementsByClassName('pop-username')[0].innerHTML = author["username"]
popover.getElementsByClassName('pop-bio')[0].innerHTML = author["bio_html"]
if (popover.getElementsByClassName('pop-bio').length > 0) {
popover.getElementsByClassName('pop-bio')[0].innerHTML = author["bio_html"]
}
popover.getElementsByClassName('pop-postcount')[0].innerHTML = author["post_count"]
popover.getElementsByClassName('pop-commentcount')[0].innerHTML = author["comment_count"]
popover.getElementsByClassName('pop-coins')[0].innerHTML = author["coins"]

View File

@ -278,6 +278,8 @@ class User(Base):
@property
@lazy
def paid_dues(self):
if not FEATURES['COUNTRY_CLUB']:
return True
return not self.shadowbanned and not (self.is_banned and not self.unban_utc) and (self.admin_level or self.club_allowed or (self.club_allowed != False and self.truecoins > dues))
@lazy
@ -592,8 +594,9 @@ class User(Base):
@property
@lazy
def banner_url(self):
if self.bannerurl: return self.bannerurl
else: return f"/i/{SITE_NAME}/site_preview.webp?v=3001"
if FEATURES['USERS_PROFILE_BANNER'] and self.bannerurl:
return self.bannerurl
return f"/i/{SITE_NAME}/site_preview.webp?v=3001"
@property
@lazy

View File

@ -148,11 +148,16 @@ FEATURES = {
'AWARDS': True,
'CHAT': True,
'PINS': True,
'COUNTRY_CLUB': True,
'PRONOUNS': False,
'BADGES': True,
'HOUSES': False,
'USERS_SUICIDE': True,
'GAMBLING': True,
'USERS_PROFILE_BANNER': True,
'USERS_PROFILE_BODYTEXT': True,
'USERS_PROFILE_SONG': True,
'USERS_SUICIDE': True,
'MARKUP_COMMANDS': True,
}
EMOJI_MARSEYS = True
@ -331,9 +336,14 @@ elif SITE == 'lgbdropthet.com':
FEATURES['PROCOINS'] = False
FEATURES['AWARDS'] = False
FEATURES['CHAT'] = False
FEATURES['COUNTRY_CLUB'] = False
FEATURES['BADGES'] = False
FEATURES['USERS_SUICIDE'] = False
FEATURES['GAMBLING'] = False
FEATURES['USERS_PROFILE_BANNER'] = False
FEATURES['USERS_PROFILE_BODYTEXT'] = False
FEATURES['USERS_PROFILE_SONG'] = False
FEATURES['USERS_SUICIDE'] = False
FEATURES['MARKUP_COMMANDS'] = False
EMOJI_MARSEYS = False
EMOJI_SRCS = ['files/assets/emojis.lgbdropthet.json']

View File

@ -1,6 +1,7 @@
from files.cli import g, app, db_session
import click
from files.helpers.const import *
from files.classes import *
import files.helpers.lottery as lottery
import files.helpers.offsitementions as offsitementions
@ -10,8 +11,35 @@ import files.routes.static as route_static
from sys import stdout
import datetime
import time
import requests
@app.cli.command('cron', help='Run scheduled tasks.')
@click.option('--every-5m', is_flag=True, help='Call every 5 minutes.')
@click.option('--every-1h', is_flag=True, help='Call every 1 hour.')
@click.option('--every-1d', is_flag=True, help='Call every 1 day.')
@click.option('--every-1mo', is_flag=True, help='Call every 1 month.')
def cron(every_5m, every_1h, every_1d, every_1mo):
g.db = db_session()
if every_5m:
lottery.check_if_end_lottery_task()
offsitementions.offsite_mentions_task()
if every_1h:
awards.award_timers_bots_task()
if every_1d:
stats.generate_charts_task(SITE)
route_static.stats_cached()
sub_inactive_purge_task()
if every_1mo:
give_monthly_marseybux_task()
g.db.commit()
g.db.close()
stdout.flush()
def sub_inactive_purge_task():
if not HOLE_INACTIVITY_DELETION:
@ -77,30 +105,3 @@ def give_monthly_marseybux_task():
return True
@app.cli.command('cron', help='Run scheduled tasks.')
@click.option('--every-5m', is_flag=True, help='Call every 5 minutes.')
@click.option('--every-1h', is_flag=True, help='Call every 1 hour.')
@click.option('--every-1d', is_flag=True, help='Call every 1 day.')
@click.option('--every-1mo', is_flag=True, help='Call every 1 month.')
def cron(every_5m, every_1h, every_1d, every_1mo):
g.db = db_session()
if every_5m:
lottery.check_if_end_lottery_task()
offsitementions.offsite_mentions_task()
if every_1h:
awards.award_timers_bots_task()
if every_1d:
stats.generate_charts_task(SITE)
route_static.stats_cached()
sub_inactive_purge_task()
if every_1mo:
give_monthly_marseybux_task()
g.db.commit()
g.db.close()
stdout.flush()

View File

@ -38,6 +38,10 @@ def end_lottery_session():
for _ in range(user.currently_held_lottery_tickets):
raffle.append(user.id)
if len(raffle) == 0:
active_lottery.is_active = False
return True, "Lottery ended with no participants."
winner = choice(raffle)
active_lottery.winner_id = winner
winning_user = next(filter(lambda x: x.id == winner, participating_users))
@ -58,7 +62,6 @@ def end_lottery_session():
active_lottery.is_active = False
return True, f'{winning_user.username} won {active_lottery.prize} coins!'

View File

@ -230,7 +230,8 @@ def sanitize(sanitized, edit=False):
sanitized = link_fix_regex.sub(r'\1https://\2', sanitized)
sanitized = command_regex.sub(command_regex_matcher, sanitized)
if FEATURES['MARKUP_COMMANDS']:
sanitized = command_regex.sub(command_regex_matcher, sanitized)
sanitized = markdown(sanitized)

View File

@ -98,7 +98,7 @@ def frontlist(v=None, sort="hot", page=1, t="all", ids_only=True, ccmode="false"
if not gt and not lt:
posts = apply_time_filter(t, posts, Submission)
if (ccmode == "true"):
if (ccmode == "true") and FEATURES['COUNTRY_CLUB']:
posts = posts.filter(Submission.club == True)
posts = posts.filter_by(is_banned=False, private=False, deleted_utc = 0)

View File

@ -31,6 +31,8 @@ titleheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWe
@app.post("/toggle_club/<pid>")
@auth_required
def toggle_club(pid, v):
if not FEATURES['COUNTRY_CLUB']:
abort(403)
post = get_post(pid)
if post.author_id != v.id and v.admin_level < 2: abort(403)
@ -906,7 +908,9 @@ def submit_post(v, sub=None):
if len(body_html) > 40000: return error("Submission body_html too long! (max 40k characters)")
club = bool(request.values.get("club",""))
club = False
if FEATURES['COUNTRY_CLUB']:
club = bool(request.values.get("club",""))
if embed and len(embed) > 1500: embed = None

View File

@ -144,7 +144,7 @@ def settings_profile_post(v):
elif request.values.get("friends"):
elif FEATURES['USERS_PROFILE_BODYTEXT'] and request.values.get("friends"):
friends = request.values.get("friends")[:500]
friends_html = sanitize(friends)
@ -170,7 +170,7 @@ def settings_profile_post(v):
msg="Your friends list has been updated.")
elif request.values.get("enemies"):
elif FEATURES['USERS_PROFILE_BODYTEXT'] and request.values.get("enemies"):
enemies = request.values.get("enemies")[:500]
enemies_html = sanitize(enemies)
@ -196,7 +196,8 @@ def settings_profile_post(v):
msg="Your enemies list has been updated.")
elif request.values.get("bio") or request.files.get('file'):
elif FEATURES['USERS_PROFILE_BODYTEXT'] and \
(request.values.get("bio") or request.files.get('file')):
bio = request.values.get("bio")[:1500]
bio += process_files()
@ -536,6 +537,9 @@ def settings_images_profile(v):
@limiter.limit("1/second;30/minute;200/hour;1000/day", key_func=lambda:f'{SITE}-{session.get("lo_user")}')
@auth_required
def settings_images_banner(v):
if not FEATURES['USERS_PROFILE_BANNER']:
abort(403)
if request.headers.get("cf-ipcountry") == "T1": return {"error":"Image uploads are not allowed through TOR."}, 403
file = request.files["banner"]
@ -637,7 +641,8 @@ def settings_block_user(v):
)
g.db.add(new_block)
send_notification(user.id, f"@{v.username} has blocked you!")
if user.admin_level >= PERMS['USER_BLOCKS_VISIBLE']:
send_notification(user.id, f"@{v.username} has blocked you!")
cache.delete_memoized(frontlist)
@ -659,7 +664,7 @@ def settings_unblock_user(v):
g.db.delete(x)
if not v.shadowbanned:
if not v.shadowbanned and user.admin_level >= PERMS['USER_BLOCKS_VISIBLE']:
send_notification(user.id, f"@{v.username} has unblocked you!")
cache.delete_memoized(frontlist)
@ -746,6 +751,8 @@ def settings_name_change(v):
@limiter.limit("3/second;10/day", key_func=lambda:f'{SITE}-{session.get("lo_user")}')
@auth_required
def settings_song_change_mp3(v):
if not FEATURES['USERS_PROFILE_SONG']:
abort(403)
file = request.files['file']
if file.content_type != 'audio/mpeg':
@ -776,6 +783,9 @@ def settings_song_change_mp3(v):
@limiter.limit("3/second;10/day", key_func=lambda:f'{SITE}-{session.get("lo_user")}')
@auth_required
def settings_song_change(v):
if not FEATURES['USERS_PROFILE_SONG']:
abort(403)
song=request.values.get("song").strip()
if song == "" and v.song:

View File

@ -21,9 +21,12 @@
<h5 class="pop-username text-truncate text-black"></h5>
</div>
</div>
{% if FEATURES['USERS_PROFILE_BODYTEXT'] -%}
<div class="px-3">
<span class="pop-bio popover-bio text-black"></span>
</div>
{%- endif %}
{% if FEATURES['BADGES'] -%}
<div class="pop-badges ml-3 mr-3 my-2">

View File

@ -116,6 +116,7 @@ Text 2
<td>:marseyrandom:</td>
<td>???</td>
</tr>
{% if FEATURES['MARKUP_COMMANDS'] -%}
<tr>
<td>Random Fortune</td>
<td>#fortune</td>
@ -131,6 +132,12 @@ Text 2
<td>#factcheck</td>
<td>???</td>
</tr>
<tr>
<td>Roll</td>
<td>#roll</td>
<td>A number 1&ndash;9999.</td>
</tr>
{%- endif %}
<tr>
<td>
Poll — Pick Multiple<br>

View File

@ -44,7 +44,7 @@
<a class="btn btn-secondary mx-2 smol-fp" href="/toggle_pins/{{sort}}"><i class="fas fas fa-thumbtack fa-rotate--45 mr-2 "></i>Pins</a>
{% endif %}
{% if v and SITE_NAME == 'rDrama' %}
{% if v and SITE_NAME == 'rDrama' and FEATURES['COUNTRY_CLUB'] %}
{% if v.paid_dues %}
{% if ccmode=="true" %}
<a data-bs-toggle="tooltip" data-bs-placement="bottom" title="Only show country club posts" class="btn btn-primary text-primary mx-2 smol-fp" href="?sort={{sort}}&t={{t}}&ccmode=false"><i class="fas fa-golf-club mr-2 "></i>CC</a>

View File

@ -2,7 +2,7 @@
{% block content %}
<h1><u>LGB RESOURCES AND ORGANIZATIONS</u></h1>
<br>
<p>If you would like to add additional resources, or find any information on this page is out-of-date, please visit our <a href="/post/47/resources-organizations-megathread-meta">Resources & Organizations mega-thread</a>. to alert site Admins.</p>
<p>If you would like to add additional resources, or find any information on this page is out-of-date, please visit our <a href="/post/47/resources-organizations-megathread-meta">Resources & Organizations mega-thread</a> to alert site Admins.</p>
<br>
<br>
@ -26,7 +26,7 @@
<dl><ul>
<li><i>About: </i>US organization that advocates for the rights of lesbians and gay men.</li>
</ul></dl>
<p><a href="#">Get The L Out</a><i> - this link will be updated from SaidIt once we get a proper Wiki on this site</i></p>
<p><a href="https://saidit.net/s/GetTheLOut/wiki/gtlo_orgs">Get The L Out</a><i> - this link will be updated from SaidIt once we get a proper Wiki on this site</i></p>
<dl><ul>
<li><i>About: </i>GetTheLOut is primarily a UK-based group representing lesbians. There are a few other chapters around the world.</li>
</ul></dl>
@ -49,7 +49,7 @@
</ul></dl>
<br>
<p><h2><u>SUPPORTIVE / RELEVANT / ALLIES</u></h2></p>
<p><a href="https://www.segm.org/">Society for Evidence-based Gender Medicine</a></p>
<p><a href="https://www.segm.org/">Society for Evidence-Based Gender Medicine</a></p>
<dl><ul>
<li><i>About: </i>Organization of physical and mental health practitioners, researchers and experts who are concerned about the lack of scientific evidence for popular treatments of gender dysphoria.</li>
<li><i>Example Article: </i><a href="https://www.segm.org/typology_of_gender_detransition">A Typology of Gender Detransition and Its Implications for Healthcare Providers</a></li>
@ -150,51 +150,51 @@ The Tavistocks experiment with puberty blockers, part 5: the belated results<
margin: 2rem 1rem;
}
/******** Hides the checkbox/radio button */
/******** Hides the checkbox/radio button */
.sources-wrapper input {
position: absolute;
opacity: 0;
z-index: -1;
}
.sources-wrapper input[type='radio'] {
display: none;
}
.sources-wrapper input {
position: absolute;
opacity: 0;
z-index: -1;
}
.sources-wrapper input[type='radio'] {
display: none;
}
/******** SOURCE TITLES */
/******** SOURCE TITLES */
.sources {
color: var(--black);
margin-bottom: 3rem;
}
.sources-label {
font-size: 1.5rem;
display: flex;
align-items: center;
justify-content: space-between;
padding: 1em;
color: var(--primary);
.sources {
color: var(--black);
margin-bottom: 3rem;
}
.sources-label {
font-size: 1.5rem;
display: flex;
align-items: center;
justify-content: space-between;
padding: 1em;
color: var(--primary);
border: 1px solid var(--primary);
border-radius: 1rem;
font-weight: bold;
cursor: pointer;
user-select: none;
}
font-weight: bold;
cursor: pointer;
user-select: none;
}
/******** SOURCE CONTENT */
/******** SOURCE CONTENT */
.sources-content {
max-height: 0;
padding: 0 1em;
background: transparent !important;
transition: all 0.35s;
display: none;
}
.sources-wrapper input:checked ~ .sources-content {
max-height: 100%;
padding: 1em;
display: block;
transition: all 0.35s;
}
.sources-content {
max-height: 0;
padding: 0 1em;
background: transparent !important;
transition: all 0.35s;
display: none;
}
.sources-wrapper input:checked ~ .sources-content {
max-height: 100%;
padding: 1em;
display: block;
transition: all 0.35s;
}
</style>
{% endblock %}

View File

@ -55,7 +55,7 @@
<a id="hole-unpin-{{p.id}}" class="dropdown-item {% if not p.hole_pinned %}d-none{% endif %} list-inline-item text-info" role="button" onclick="post_toast(this,'/hole_unpin/{{p.id}}','hole-pin-{{p.id}}','hole-unpin-{{p.id}}','d-none')"><i class="fas fa-thumbtack fa-rotate--45"></i>Unpin fron /h/{{p.sub}}</a>
{% endif %}
{% if v.admin_level > 1 or v.id == p.author_id %}
{% if FEATURES['COUNTRY_CLUB'] and (v.admin_level > 1 or v.id == p.author_id) %}
<a id="club-{{p.id}}" class="dropdown-item {% if p.club %}d-none{% endif %} list-inline-item text-info" role="button" onclick="post_toast(this,'/toggle_club/{{p.id}}','club-{{p.id}}','unclub-{{p.id}}','d-none')"><i class="fas fa-eye-slash"></i>Mark club</a>
<a id="unclub-{{p.id}}" class="dropdown-item {% if not p.club %}d-none{% endif %} list-inline-item text-info" role="button" onclick="post_toast(this,'/toggle_club/{{p.id}}','club-{{p.id}}','unclub-{{p.id}}','d-none')"><i class="fas fa-eye"></i>Unmark club</a>
{% endif %}

View File

@ -39,8 +39,10 @@
<button id="delete-{{p.id}}" class="{% if p.deleted_utc %}d-none{% endif %} nobackground btn btn-link btn-block btn-lg text-left text-danger" data-bs-toggle="modal" data-bs-dismiss="modal" data-bs-target="#deletePostModal" onclick="delete_postModal('{{p.id}}')"><i class="far fa-trash-alt mr-3"></i>Delete</button>
{% if FEATURES['COUNTRY_CLUB'] -%}
<button id="club3-{{p.id}}" class="{% if p.club %}d-none{% endif %} nobackground btn btn-link btn-block btn-lg text-danger text-left" role="button" onclick="post_toast(this,'/toggle_club/{{p.id}}','club3-{{p.id}}','unclub3-{{p.id}}','d-none')" data-bs-dismiss="modal"><i class="fas fa-eye-slash mr-3"></i>Mark club</button>
<button id="unclub3-{{p.id}}" class="{% if not p.club %}d-none{% endif %} nobackground btn btn-link btn-block btn-lg text-success text-left" role="button" onclick="post_toast(this,'/toggle_club/{{p.id}}','club3-{{p.id}}','unclub3-{{p.id}}','d-none')" data-bs-dismiss="modal"><i class="fas fa-eye mr-3"></i>Unmark club</button>
{%- endif %}
<button id="mark3-{{p.id}}" class="{% if p.over_18 %}d-none{% endif %} nobackground btn btn-link btn-block btn-lg text-left text-danger" onclick="post_toast(this,'/toggle_post_nsfw/{{p.id}}','mark3-{{p.id}}','unmark3-{{p.id}}','d-none')" data-bs-dismiss="modal"><i class="far fa-eye-evil text-center mr-3"></i>Mark +18</button>
<button id="unmark3-{{p.id}}" class="{% if not p.over_18 %}d-none{% endif %} nobackground btn btn-link btn-block btn-lg text-left text-success" onclick="post_toast(this,'/toggle_post_nsfw/{{p.id}}','mark3-{{p.id}}','unmark3-{{p.id}}','d-none')" data-bs-dismiss="modal"><i class="far fa-eye-evil text-center mr-3"></i>Unmark +18</button>

View File

@ -13,8 +13,10 @@
<button class="nobackground btn btn-link btn-block btn-lg text-left text-muted" data-bs-dismiss="modal" onclick="togglePostEdit('{{p.id}}')"><i class="far fa-edit text-center text-muted mr-3"></i>Edit</button>
{% endif %}
{% if FEATURES['COUNTRY_CLUB'] -%}
<button id="club2-{{p.id}}" class="{% if p.club %}d-none{% endif %} nobackground btn btn-link btn-block btn-lg text-info text-left" role="button" onclick="post_toast(this,'/toggle_club/{{p.id}}','club2-{{p.id}}','unclub2-{{p.id}}','d-none')" data-bs-dismiss="modal"><i class="fas fa-eye-slash mr-3"></i>Mark club</button>
<button id="unclub2-{{p.id}}" class="{% if not p.club %}d-none{% endif %} nobackground btn btn-link btn-block btn-lg text-info text-left" role="button" onclick="post_toast(this,'/toggle_club/{{p.id}}','club2-{{p.id}}','unclub2-{{p.id}}','d-none')" data-bs-dismiss="modal"><i class="fas fa-eye mr-3"></i>Unmark club</button>
{%- endif %}
<button id="distinguish2-{{p.id}}" class="{% if p.distinguish_level %}d-none{% endif %} nobackground btn btn-link btn-block btn-lg text-left text-primary" role="button" onclick="post_toast(this,'/distinguish/{{p.id}}','distinguish2-{{p.id}}','undistinguish2-{{p.id}}','d-none')" data-bs-dismiss="modal"><i class="fas fa-crown text-center text-primary mr-3"></i>Distinguish</button>

View File

@ -242,6 +242,8 @@
</div>
</div>
{% if FEATURES['USERS_PROFILE_BANNER'] -%}
<h2 class="h5">Profile Banner</h2>
<div class="settings-section rounded">
@ -275,6 +277,7 @@
</div>
</div>
{%- endif %}
<h2 class="h5" id="referral" name="referral">Referrals</h2>
@ -389,6 +392,8 @@
</div>
</div>
{% if FEATURES['USERS_PROFILE_SONG'] -%}
<div class="body d-lg-flex border-bottom">
<label class="text-black w-lg-25">Profile Anthem</label>
@ -422,6 +427,8 @@
</div>
</div>
{%- endif %}
<div class="body d-lg-flex border-bottom">
<label class="text-black w-lg-25">Name Color</label>
@ -599,7 +606,7 @@
{% endif %}
{% if FEATURES['USERS_PROFILE_BODYTEXT'] -%}
<div class="body d-lg-flex border-bottom">
<label class="text-black w-lg-25">Bio</label>
@ -671,6 +678,7 @@
</div>
</div>
{%- endif %}
{% if v.patron or v.id == MOOSE_ID %}

View File

@ -24,7 +24,6 @@
{% endif %}
<p class="text-center text-md mb-4">
<a class="sidebar-link" href="/badges" data-bs-toggle="tooltip" data-bs-placement="top" title="Badges"><i class="fas fa-hexagon"></i></a>
<a class="sidebar-link" href="/admins" data-bs-toggle="tooltip" data-bs-placement="top" title="Admins"><i class="fas fa-crown"></i></a>
<a class="sidebar-link" href="/log" data-bs-toggle="tooltip" data-bs-placement="top" title="Moderation Log"><i class="fas fa-scroll-old"></i></a>
<a class="sidebar-link" href="/transfers" data-bs-toggle="tooltip" data-bs-placement="top" title="Transfers"><i class="fas fa-arrow-right-arrow-left"></i></a>
@ -100,6 +99,11 @@
</ul>
</div>
{% endif %}
<hr>
<div id="sidebar-lgb--host-notice">
<img src="{{asset_siteimg('sidebar_host.webp')}}" />
<a href="https://rdrama.net/">Proudly hosted by rDrama.</a>
</div>
<pre>

View File

@ -53,6 +53,7 @@
<a href="/h/child">Child</a>
<a href="/h/misc">Misc</a>
<a href="/h/request">Request</a>
<a href="/h/discussion">Discussion</a>
<a href="/h/meta">Meta</a>
</div>

View File

@ -24,9 +24,12 @@
<h5 class="pop-username text-truncate text-black"></h5>
</div>
</div>
{% if FEATURES['USERS_PROFILE_BODYTEXT'] -%}
<div class="px-3">
<span class="pop-bio popover-bio text-black"></span>
</div>
{%- endif %}
{% if FEATURES['BADGES'] -%}
<div class="pop-badges ml-3 mr-3 my-2">

View File

@ -176,10 +176,12 @@
<label class="custom-control-label" for="private">Draft</label>
</div>
{% if FEATURES['COUNTRY_CLUB'] -%}
<div class="custom-control custom-checkbox">
<input autocomplete="off" type="checkbox" class="custom-control-input" id="club" name="club">
<label class="custom-control-label" for="club">{{CC_TITLE}} thread</label>
</div>
{%- endif %}
<div class="custom-control custom-checkbox">
<input onchange='draft(this);' autocomplete="off" type="checkbox" class="custom-control-input" id="ghost" name="ghost" {% if v.coins < 100 %}disabled{% endif %}>

View File

@ -29,7 +29,7 @@
<span id="profile--lastactive" class="ml-2">last active <span id="profile--lastactive--time" data-bs-toggle="tooltip" data-bs-placement="bottom" onmouseover="timestamp('profile--lastactive--time','{{u.last_active}}')">{{u.last_active_date}}</span></span>
{%- endif %}
{% if not hide_bios and u.bio_html %}
{% if FEATURES['USERS_PROFILE_BODYTEXT'] and not hide_bios and u.bio_html %}
<div class="card-text mt-3">{{u.bio_html | safe}}</div>
{% endif %}
</div>

View File

@ -33,7 +33,7 @@
<div class="row d-none d-md-block">
<div class="col px-0">
<div class="jumbotron jumbotron-fluid jumbotron-guild d-none d-md-block" style="background-image: url({{u.banner_url}})">
<div class="jumbotron jumbotron-fluid jumbotron-guild d-none d-md-block" {% if FEATURES['USERS_PROFILE_BANNER'] %}style="background-image: url({{u.banner_url}})"{% endif %}>
<div class="jumbotron-overlay"></div>
<div class="w-100 my-3">
<div class="container-fluid nobackground">
@ -128,9 +128,11 @@
<img alt="marseybux" class="ml-1 mb-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Marseybux" height="20" width="46" src="/i/marseybux.webp?v=2000">&nbsp;&nbsp;
{% endif %}
<a href="/@{{u.username}}/followers" id="profile--followers">{{u.stored_subscriber_count}} follower{{'s' if u.stored_subscriber_count != 1 else ''}}</a>&nbsp;&nbsp;
{% if PERMS['USER_FOLLOWS_VISIBLE'] == 0 or (v and v.admin_level >= PERMS['USER_FOLLOWS_VISIBLE']) -%}
<a href="/@{{u.username}}/followers" id="profile--followers">{{u.stored_subscriber_count}} follower{{'s' if u.stored_subscriber_count != 1 else ''}}</a>&nbsp;&nbsp;
<a href="/@{{u.username}}/following" id="profile--following">follows {{u.follow_count}} user{{'s' if u.follow_count != 1 else ''}}</a>&nbsp;&nbsp;
<a href="/@{{u.username}}/following" id="profile--following">follows {{u.follow_count}} user{{'s' if u.follow_count != 1 else ''}}</a>&nbsp;&nbsp;
{%- endif %}
<span id="profile--joined">joined <span id="profile--joined--time" data-bs-toggle="tooltip" data-bs-placement="bottom" onmouseover="timestamp('profile--joined--time','{{u.created_utc}}')">{{u.created_date}}</span></span>
@ -140,22 +142,24 @@
</div>
{% if u.basedcount %}<p class="text-muted" id="profile--based">Based Count: {{u.basedcount}}</p>{% endif %}
{% if u.bio_html %}
<pre></pre>
<div class="text-muted font-weight-bolder" id="profile--bio">{{u.bio_html | safe}}</div>
{% else %}
<p class="text-muted" id="profile--bio">No bio...</p>
{% endif %}
{% if FEATURES['USERS_PROFILE_BODYTEXT'] -%}
{% if u.bio_html %}
<pre></pre>
<div class="text-muted font-weight-bolder" id="profile--bio">{{u.bio_html | safe}}</div>
{% else %}
<p class="text-muted" id="profile--bio">No bio...</p>
{% endif %}
{% if u.friends_html %}
<p class="text-muted font-weight-bold">Friends:</p>
<div id="profile--friends">{{u.friends_html | safe}}</div>
{% endif %}
{% if u.friends_html %}
<p class="text-muted font-weight-bold">Friends:</p>
<div id="profile--friends">{{u.friends_html | safe}}</div>
{% endif %}
{% if u.enemies_html %}
<p class="text-muted font-weight-bold">Enemies:</p>
<div id="profile--enemies">{{u.enemies_html | safe}}</div>
{% endif %}
{% if u.enemies_html %}
<p class="text-muted font-weight-bold">Enemies:</p>
<div id="profile--enemies">{{u.enemies_html | safe}}</div>
{% endif %}
{%- endif %}
{% if u.received_awards and FEATURES['AWARDS'] %}
<div class="text-white rounded p-2 mb-3" id="profile--awards" style="background-color: rgba(50, 50, 50, 0.6); width: 30%;">
@ -249,7 +253,7 @@
<a href="/views" class="btn btn-secondary">Profile views</a>
{% endif %}
{% if u.song and v and (v.id == u.id or v.mute and not u.unmutable) %}
{% if FEATURES['USERS_PROFILE_SONG'] and u.song and v and (v.id == u.id or v.mute and not u.unmutable) %}
<a class="btn btn-secondary" role="button" onclick="toggle()">Toggle anthem</a>
{% endif %}
@ -326,8 +330,11 @@
<input type="submit" onclick="disable(this)" class="btn btn-danger" value="Remove User's Content">
</form>
<pre></pre>
{% if FEATURES['COUNTRY_CLUB'] -%}
<button id="grant2" class="{% if u.paid_dues %}d-none{% endif %} btn btn-success" onclick="post_toast(this,'/@{{u.username}}/club_allow','grant2','bar2','d-none')">Grant club access</button>
<button id="bar2" class="{% if u.club_allowed == False %}d-none{% endif %} btn btn-danger" onclick="post_toast(this,'/@{{u.username}}/club_ban','grant2','bar2','d-none')">Bar from club</button>
{%- endif %}
{% endif %}
<pre></pre>
<div id="profile--info">
@ -444,9 +451,11 @@
<img alt="marseybux" class="ml-1 mb-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Marseybux" height="15" width="35" src="/i/marseybux.webp?v=2000">&nbsp;&nbsp;
{% endif %}
<a href="/@{{u.username}}/followers" class="font-weight-bold" id="profile-mobile--followers">{{u.stored_subscriber_count}} follower{{'s' if u.stored_subscriber_count != 1 else ''}}</a>&nbsp;&nbsp;
{% if PERMS['USER_FOLLOWS_VISIBLE'] == 0 or (v and v.admin_level >= PERMS['USER_FOLLOWS_VISIBLE']) -%}
<a href="/@{{u.username}}/followers" class="font-weight-bold" id="profile-mobile--followers">{{u.stored_subscriber_count}} follower{{'s' if u.stored_subscriber_count != 1 else ''}}</a>&nbsp;&nbsp;
<a href="/@{{u.username}}/following" class="font-weight-bold" id="profile-mobile--following" style="display:block">follows {{u.follow_count}} user{{'s' if u.follow_count != 1 else ''}}</a>&nbsp;&nbsp;
<a href="/@{{u.username}}/following" class="font-weight-bold" id="profile-mobile--following" style="display:block">follows {{u.follow_count}} user{{'s' if u.follow_count != 1 else ''}}</a>&nbsp;&nbsp;
{%- endif %}
{% if u.basedcount %}
<br><span id="profile-mobile--based">Based count: {{u.basedcount}}</span>
@ -458,19 +467,22 @@
<br><span id="profile-mobile--lastactive">last active <span id="profile-mobile--lastactive--time" data-bs-toggle="tooltip" data-bs-placement="bottom" onmouseover="timestamp('profile-mobile--lastactive--time','{{u.last_active}}')" class="font-weight-bold">{{u.last_active_date}}</span></span>
{%- endif %}
</div>
{% if u.bio_html %}
<div class="text-muted text-break" id="profile-mobile--bio">{{u.bio_html | safe}}</div>
{% endif %}
{% if u.friends_html %}
<p class="text-muted font-weight-bold mt-3">Friends:</p>
<div id="profile-mobile--friends">{{u.friends_html | safe}}</div>
{% endif %}
{% if FEATURES['USERS_PROFILE_BODYTEXT'] -%}
{% if u.bio_html %}
<div class="text-muted text-break" id="profile-mobile--bio">{{u.bio_html | safe}}</div>
{% endif %}
{% if u.enemies_html %}
<p class="text-muted font-weight-bold mt-3">Enemies:</p>
<div id="profile-mobile--enemies">{{u.enemies_html | safe}}</div>
{% endif %}
{% if u.friends_html %}
<p class="text-muted font-weight-bold mt-3">Friends:</p>
<div id="profile-mobile--friends">{{u.friends_html | safe}}</div>
{% endif %}
{% if u.enemies_html %}
<p class="text-muted font-weight-bold mt-3">Enemies:</p>
<div id="profile-mobile--enemies">{{u.enemies_html | safe}}</div>
{% endif %}
{%- endif %}
{% if u.received_awards and FEATURES['AWARDS'] %}
<div class="text-white rounded p-2 my-3 text-center" id="profile-mobile--awards" style="background-color: rgba(50, 50, 50, 0.6);">
@ -509,7 +521,7 @@
<a href="/views" class="btn btn-secondary">Profile views</a>
{% endif %}
{% if u.song and v and (v.id == u.id or v.mute and not u.unmutable) %}
{% if FEATURES['USERS_PROFILE_SONG'] and u.song and v and (v.id == u.id or v.mute and not u.unmutable) %}
<a class="btn btn-secondary" role="button" onclick="toggle()">Toggle anthem</a>
{% endif %}
@ -574,8 +586,10 @@
{% if v.admin_level > 1 %}
{% if FEATURES['COUNTRY_CLUB'] -%}
<button id="grant" class="{% if u.paid_dues %}d-none{% endif %} btn btn-success" onclick="post_toast(this,'/@{{u.username}}/club_allow','grant','bar','d-none')">Grant club access</button>
<button id="bar" class="{% if u.club_allowed == False %}d-none{% endif %} btn btn-danger" onclick="post_toast(this,'/@{{u.username}}/club_ban','grant','bar','d-none')">Bar from club</button>
{%- endif %}
<br><br>
<div class="body d-lg-flex border-bottom">
@ -770,7 +784,7 @@
</div>
{% if u.song %}
{% if FEATURES['USERS_PROFILE_SONG'] and u.song %}
{% if v and v.id == u.id %}
<div id="v_username" class="d-none">{{v.username}}</div>
{% else %}

View File

@ -1,6 +1,6 @@
{%-
set CACHE_VER = {
'css/main.css': 426,
'css/main.css': 427,
'css/catalog.css': 2,
'css/4chan.css': 61,
@ -18,7 +18,7 @@ set CACHE_VER = {
'js/award_modal.js': 253,
'js/bootstrap.js': 275,
'js/comments+submission_listing.js': 264,
'js/comments+submission_listing.js': 265,
'js/submission_listing.js': 261,
'js/emoji_modal.js': 312,
'js/formatting.js': 240,