fix up tabs

pull/216/head
Aevann 2023-10-29 15:51:00 +03:00
parent aa2c90c893
commit a68dcfd5fe
103 changed files with 5909 additions and 5943 deletions

View File

@ -2,23 +2,23 @@
{% block pagetitle %}Admin Home{% endblock %}
{% block customPadding %}px-3{% endblock %}
{% block content %}
<h3 class="py-2">Admin Tools</h3>
<h3 class="py-2">Admin Tools</h3>
{% if v.admin_level >= PERMS['INSERT_TRANSACTION'] %}
{% if v.admin_level >= PERMS['INSERT_TRANSACTION'] %}
<h4>Transactions</h4>
<ul>
<li><a href="/admin/insert_transaction">Insert Transaction</a></li>
</ul>
{%- endif %}
{%- endif %}
{% if v.admin_level >= PERMS['ORGIES'] %}
{% if v.admin_level >= PERMS['ORGIES'] %}
<h4>Orgies</h4>
<ul>
<li><a href="/admin/orgies">Schedule/Stop Orgy</a></li>
</ul>
{%- endif %}
{%- endif %}
{% if v.admin_level >= PERMS['USE_ADMIGGER_THREADS'] and (SITE_NAME == 'rDrama' or SIDEBAR_THREAD or BANNER_THREAD or BADGE_THREAD or SNAPPY_THREAD) %}
{% if v.admin_level >= PERMS['USE_ADMIGGER_THREADS'] and (SITE_NAME == 'rDrama' or SIDEBAR_THREAD or BANNER_THREAD or BADGE_THREAD or SNAPPY_THREAD) %}
<h4>Add Stuff</h4>
<ul>
{% if v.admin_level >= PERMS['USE_ADMIGGER_THREADS'] %}
@ -50,10 +50,10 @@
<li><a href="/admin/update/hats">Update Hats</a></li>
{% endif %}
</ul>
{% endif %}
{% endif %}
<h4>Content</h4>
<ul>
<h4>Content</h4>
<ul>
{% if v.admin_level >= PERMS['ENABLE_DM_MEDIA'] %}
<li><a href="/admin/dm_media">DM Media</a></li>
{% endif %}
@ -63,10 +63,10 @@
<li><a href="/admin/reported/posts">Reported Posts/Comments</a></li>
<li><a href="/admin/removed/posts">Removed Posts/Comments</a></li>
{% endif %}
</ul>
</ul>
<h4>Users</h4>
<ul>
<h4>Users</h4>
<ul>
{% if v.can_see_shadowbanned %}
<li><a href="/admin/shadowbanned">Shadowbanned Users</a></li>
{% endif %}
@ -82,10 +82,10 @@
<li><a href="/admin/loggedin">Currently Logged-in Users</a></li>
<li><a href="/admin/loggedout">Currently Logged-out Users</a></li>
{% endif %}
</ul>
</ul>
<h4>Safety</h4>
<ul>
<h4>Safety</h4>
<ul>
{% if v.admin_level >= PERMS['DELETE_MEDIA'] %}
<li><a href="/admin/delete_media">Delete Media</a></li>
{% endif %}
@ -98,32 +98,32 @@
{% if v.admin_level >= PERMS['VIEW_ALT_VOTES'] %}
<li><a href="/admin/alt_votes">Alt Vote Analysis</a></li>
{% endif %}
</ul>
</ul>
{% if FEATURES['BADGES'] and v.admin_level >= PERMS['USER_BADGES'] -%}
<h4>Badges</h4>
<ul>
{% if FEATURES['BADGES'] and v.admin_level >= PERMS['USER_BADGES'] -%}
<h4>Badges</h4>
<ul>
<li><a href="/admin/badge_grant">Grant Badges</a></li>
<li><a href="/admin/badge_remove">Remove Badges</a></li>
</ul>
{%- endif %}
</ul>
{%- endif %}
{% if FEATURES['GAMBLING'] and v.admin_level >= PERMS['LOTTERY_VIEW_PARTICIPANTS'] -%}
<h4>Casino</h4>
<ul>
{% if FEATURES['GAMBLING'] and v.admin_level >= PERMS['LOTTERY_VIEW_PARTICIPANTS'] -%}
<h4>Casino</h4>
<ul>
<li><a href="/admin/lottery/participants">Participants</a></li>
</ul>
{%- endif %}
</ul>
{%- endif %}
<h4>Statistics</h4>
<ul>
<h4>Statistics</h4>
<ul>
<li><a href="/stats">Content Stats</a></li>
<li><a href="/weekly_chart">Weekly Stat Chart</a></li>
<li><a href="/daily_chart">Daily Stat Chart</a></li>
</ul>
</ul>
<h4>Configuration</h4>
<ul class="pb-3">
<h4>Configuration</h4>
<ul class="pb-3">
{% if v.admin_level >= PERMS['EDIT_RULES'] %}
<li><a href="/admin/edit_rules">Edit the Rules</a></li>
{%- endif %}
@ -133,9 +133,9 @@
{% if v.admin_level >= PERMS['APPS_MODERATION'] %}
<li><a href="/admin/apps">Apps</a></li>
{% endif %}
</ul>
</ul>
{% if v.admin_level >= PERMS['SITE_SETTINGS'] %}
{% if v.admin_level >= PERMS['SITE_SETTINGS'] %}
{% for setting in SITE_SETTINGS.keys() %}
{% if not (setting == "offline_mode" and v.admin_level < PERMS["SITE_OFFLINE_MODE"]) %}
<div class="custom-control custom-switch{% if loop.index > 1 %} mt-1{% endif %}" id="settings-{{setting}}-container">
@ -144,14 +144,13 @@
</div>
{% endif %}
{% endfor %}
{% endif %}
{% endif %}
{% if v.admin_level >= PERMS['SITE_CACHE_PURGE_CDN'] %}
{% if v.admin_level >= PERMS['SITE_CACHE_PURGE_CDN'] %}
<button type="button" class="btn btn-primary" data-nonce="{{g.nonce}}" data-onclick="postToastSwitch(this,'/admin/clear_cloudflare_cache')" style="margin-bottom: 2em">CLEAR CLOUDFLARE CACHE</button>
{% endif %}
{% endif %}
{% if v.admin_level >= PERMS['CLAIM_REWARDS_ALL_USERS'] %}
{% if v.admin_level >= PERMS['CLAIM_REWARDS_ALL_USERS'] %}
<button type="button" class="btn btn-primary d-block" data-nonce="{{g.nonce}}" data-onclick="postToastSwitch(this,'/admin/claim_rewards_all_users')" style="margin-bottom: 2em">CLAIM {{patron.upper()}} REWARDS FOR ALL USERS</button>
{% endif %}
{% endif %}
{% endblock %}

View File

@ -1,18 +1,18 @@
{% extends "default.html" %}
{% block pagetitle %}Alt Vote Analysis{% endblock %}
{% block content %}
<h5 class="mt-3">Vote Info</h5>
<h5 class="mt-3">Vote Info</h5>
<form method="get" class="mb-6">
<form method="get" class="mb-6">
<label for="link-input">Usernames</label>
<input autocomplete="off" id="link-input" type="text" class="form-control mb-2" name="u1" value="{{u1.username if u1 else ''}}" placeholder="User 1">
<input autocomplete="off" id="link-input" type="text" class="form-control mb-2" name="u2" value="{{u2.username if u2 else ''}}" placeholder="User 2">
<input type="submit" value="Submit" class="btn btn-primary">
</form>
</form>
{% if u1 and u2 %}
<h2>Analysis</h2>
<div class="overflow-x-auto"><table class="table table-striped mb-5">
{% if u1 and u2 %}
<h2>Analysis</h2>
<div class="overflow-x-auto"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th class="disable-sort-click"></th>
@ -45,8 +45,8 @@
<td>{{data['both_comment_downs']}}</td>
<td>{{data['u2_only_comment_downs']}} ({{data['u2_comment_downs_unique']}}%)</td>
</tr>
</table>
{% if v.admin_level >= PERMS['USER_LINK'] %}
</table>
{% if v.admin_level >= PERMS['USER_LINK'] %}
<h2>Link Accounts</h2>
{% if u2 in get_alt_graph(u1.id) %}
@ -57,6 +57,6 @@
<button class="btn btn-danger" data-areyousure="postToastReload(this,'/@{{u1.username}}/alts/?other_username={{u2.username}}')" data-nonce="{{g.nonce}}" data-onclick="areyousure(this)">Link {{u1.username}} and {{u2.username}}</button>
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endblock %}

View File

@ -1,25 +1,25 @@
{% extends "settings2.html" %}
{% block pagetitle %}Alts{% if u %} for @{{u.username}}{% endif %}{% endblock %}
{% block content %}
{% if u %}
{% if u %}
<h5 class="mt-3">Alts for <a href="/@{{u.username}}">@{{u.username}}</a></h5>
{% else %}
{% else %}
<h5 class="mt-3">Alts</h5>
{% endif %}
<section class="username-input-section mb-3">
{% endif %}
<section class="username-input-section mb-3">
<form action="/admin/alts" method="get">
<label for="link-input">Username</label>
<input autocomplete="off" id="link-input" type="text" class="form-control mb-2" name="username" value="{{u.username if u else ''}}" placeholder="Username">
<input type="submit" value="Submit" class="btn btn-primary">
</form>
</section>
{% if u %}
{% set count=alts|length %}
<section class="userinfo-section">
</section>
{% if u %}
{% set count=alts|length %}
<section class="userinfo-section">
<p><a href="/@{{u.username}}">@{{u.username}}</a> created their account {{u.created_utc|timestamp}} and has {{count}} known alt{{macros.plural(count)}}.<br>
They are {% if not u.is_permabanned %}not {% endif %}permanently banned{% if v.can_see_shadowbanned %} and they are {% if not u.shadowbanned %}not {% endif %}shadowbanned{% endif %}.</p>
</section>
<div class="overflow-x-auto">
</section>
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
@ -46,15 +46,15 @@
</tr>
{% endfor %}
</table>
</div>
<section id="add-alt" class="rounded rounded-section p-3">
</div>
<section id="add-alt" class="rounded rounded-section p-3">
<h5>Add Alt</h5>
<p>This tool allows you to link an alt.</p>
<label for="link-input-other">Other Username</label>
<input autocomplete="off" id="link-input-other" type="text" class="form-control mb-2" name="other_username" placeholder="Other Username">
<button id="add-alt-form-link" class="btn btn-danger mr-3" data-areyousure="submitAddAlt(this, '{{u.username}}')" data-nonce="{{g.nonce}}" data-onclick="areyousure(this)">Add Alt</button>
</section>
{% endif %}
</section>
{% endif %}
<script defer src="{{'js/admin/alts.js' | asset}}"></script>
<script defer src="{{'js/admin/alts.js' | asset}}"></script>
{% endblock %}

View File

@ -1,7 +1,7 @@
{% extends "default.html" %}
{% block pagetitle %}API App Administration{% endblock %}
{% block content %}
<div class="row">
<div class="row">
<div class="col col-lg-8">
<div class="settings">
{% for app in apps %}
@ -43,8 +43,7 @@
{% endfor %}
</div>
</div>
</div>
<script defer src="{{'js/admin/apps.js' | asset}}"></script>
</div>
<script defer src="{{'js/admin/apps.js' | asset}}"></script>
{% endblock %}

View File

@ -2,16 +2,16 @@
{% block pagetitle %}{{"Badge Grant" if grant else "Badge Remove"}}{% endblock %}
{% block pagetype %}message{% endblock %}
{% block content %}
<link rel="stylesheet" href="{{('css/admin/badges.css') | asset}}">
<link rel="stylesheet" href="{{('css/admin/badges.css') | asset}}">
{% set form_action = "/admin/badge_grant" if grant else "/admin/badge_remove" %}
{% set form_action = "/admin/badge_grant" if grant else "/admin/badge_remove" %}
<form action="{{form_action}}" method="post" data-nonce="{{g.nonce}}" data-onsubmit="sendFormXHR(this)">
<input hidden name="formkey" value="{{v|formkey}}">
<form action="{{form_action}}" method="post" data-nonce="{{g.nonce}}" data-onsubmit="sendFormXHR(this)">
<input hidden name="formkey" value="{{v|formkey}}">
<div class="overflow-x-auto mt-4"><table class="table table-striped">
<thead class="bg-primary text-white">
<div class="overflow-x-auto mt-4">
<table class="table table-striped">
<thead class="bg-primary text-white">
<tr>
<th>Select</th>
<th>Image</th>
@ -20,8 +20,8 @@
</tr>
</thead>
<tbody>
{% for badge in badge_types %}
<tr>
{% for badge in badge_types %}
<tr>
<td>
<div class="custom-control">
<input autocomplete="off" class="custom-control-input" type="radio" id="{{badge.id}}" name="badge_id" value="{{badge.id}}" required>
@ -35,22 +35,23 @@
</td>
<td>{{badge.name}}</td>
<td>{{badge.description}}</td>
</tr>
{% endfor %}
</table>
<label for="input-usernames">Usernames (separated with a space)</label>
{% set usernames = request.values.get('usernames') %}
<input autocomplete="off" id="input-usernames" class="form-control" type="text" name="usernames" placeholder="Required (separated by space)" {% if usernames %}value="{{usernames}}"{% endif %} required>
</tr>
{% endfor %}
</table>
</div>
{% if grant %}
<label class="mt-2" for="input-url">URL</label>
<input autocomplete="off" id="input-url" class="form-control" type="text" name="url" type="url" placeholder="Optional">
<label for="input-usernames">Usernames (separated with a space)</label>
{% set usernames = request.values.get('usernames') %}
<input autocomplete="off" id="input-usernames" class="form-control" type="text" name="usernames" placeholder="Required (separated by space)" {% if usernames %}value="{{usernames}}"{% endif %} required>
<label class="mt-2" for="input-description">Custom description</label>
<input autocomplete="off" id="input-description" class="form-control" type="text" name="description" placeholder="Optional except for specific badges">
{% endif %}
<input autocomplete="off" class="btn btn-primary mt-3" type="submit">
{% if grant %}
<label class="mt-2" for="input-url">URL</label>
<input autocomplete="off" id="input-url" class="form-control" type="text" name="url" type="url" placeholder="Optional">
</form>
<label class="mt-2" for="input-description">Custom description</label>
<input autocomplete="off" id="input-description" class="form-control" type="text" name="description" placeholder="Optional except for specific badges">
{% endif %}
<input autocomplete="off" class="btn btn-primary mt-3" type="submit">
</form>
{% endblock %}

View File

@ -2,10 +2,9 @@
{% block pagetitle %}Banned Domains{% endblock %}
{% block content %}
<script defer src="{{'js/admin/banned_domains.js' | asset}}"></script>
<script defer src="{{'js/admin/banned_domains.js' | asset}}"></script>
<div class="overflow-x-auto mt-2">
<div class="overflow-x-auto mt-2">
<table class="table table-striped mb-5" id="domains-table">
<thead class="bg-primary text-white">
<tr>
@ -35,6 +34,5 @@
<input autocomplete="off" name="reason" placeholder="Enter ban reason here.." data-nonce="{{g.nonce}}" data-undisable_element="ban-submit" class="form-control mt-2">
<input autocomplete="off" id="ban-submit" type="submit" class="btn btn-primary mt-2" value="Ban domain" disabled>
</form>
</div>
</div>
{% endblock %}

View File

@ -3,7 +3,7 @@
{% block pagetitle %}Delete Media{% endblock %}
{% block content %}
<form class="mt-3" action="/admin/delete_media" method="post" data-nonce="{{g.nonce}}" data-onsubmit="sendFormXHR(this)">
<form class="mt-3" action="/admin/delete_media" method="post" data-nonce="{{g.nonce}}" data-onsubmit="sendFormXHR(this)">
<div class="container">
<div class="row justify-content-center mb-4 pb-6">
<div class="col col-md-6 p-3 py-md-0">
@ -22,5 +22,5 @@
</div>
</div>
</div>
</form>
</form>
{% endblock %}

View File

@ -1,8 +1,8 @@
{% extends "default.html" %}
{% block pagetitle %}DM Media{% endblock %}
{% block content %}
<h2>DM Media</h2>
<div class="overflow-x-auto">
<h2>DM Media</h2>
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
@ -55,9 +55,9 @@
</tr>
{% endfor %}
</table>
</div>
</div>
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
{% include "pagination.html" %}
{% endblock %}

View File

@ -3,7 +3,7 @@
{% block pagetitle %}Edit {{SITE_NAME}}'s rules{% endblock %}
{% block content %}
<div class="row my-5">
<div class="row my-5">
<div class="col">
<div class="settings mx-3">
<div id="description">
@ -24,5 +24,5 @@
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -5,7 +5,7 @@
{% block mobileUserBanner %}{% endblock %}
{% block pagetitle %}Image feed{% endblock %}
{% block content %}
<div class="row no-gutters">
<div class="row no-gutters">
<div class="col">
{% block listing %}
<div class="posts">
@ -13,9 +13,9 @@
</div>
{% endblock %}
</div>
</div>
</div>
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
{% include "pagination.html" %}
{% endblock %}

View File

@ -1,21 +1,22 @@
{% extends "settings2.html" %}
{% block pagetitle %}Logged In Users{% endblock %}
{% block content %}
<div class="overflow-x-auto"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>#</th>
<th>Name</th>
<th>Truescore</th>
</tr>
</thead>
{% for user in users %}
</thead>
{% for user in users %}
<tr>
<td>{{loop.index}}</td>
<td>{% include "user_in_table.html" %}</td>
<td>{{"{:,}".format(user.truescore)}}</td>
</tr>
{% endfor %}
</table>
{% endfor %}
</table>
</div>
{% endblock %}

View File

@ -1,19 +1,20 @@
{% extends "settings2.html" %}
{% block pagetitle %}Logged Out Users{% endblock %}
{% block content %}
<div class="overflow-x-auto"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>#</th>
<th>Details</th>
</tr>
</thead>
{% for user in users %}
</thead>
{% for user in users %}
<tr>
<td>{{loop.index}}</td>
<td>{{user}}</td>
</tr>
{% endfor %}
</table>
{% endfor %}
</table>
</div>
{% endblock %}

View File

@ -1,21 +1,23 @@
{% extends "default.html" %}
{% block pagetitle %}Lottery Participants{% endblock %}
{% block content %}
<h5 class="my-1">Admin — Lottery Participants</h5>
<div class="overflow-x-auto"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h5 class="my-1">Admin — Lottery Participants</h5>
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>#</th>
<th>Name</th>
<th>Tickets Held</th>
</tr>
</thead>
{% for user in participants %}
</thead>
{% for user in participants %}
<tr>
<td>{{loop.index}}</td>
<td>{% include "user_in_table.html" %}</td>
<td>{{user.currently_held_lottery_tickets}}</td>
</tr>
{% endfor %}
</table>
{% endfor %}
</table>
</div>
{% endblock %}

View File

@ -3,7 +3,7 @@
{% block pagetitle %}Orgy Control Panel{% endblock %}
{% block content %}
<div class="row my-5">
<div class="row my-5">
<div class="col">
<div class="settings mx-3">
<div id="description">
@ -46,9 +46,9 @@
</div>
</div>
</div>
</div>
</div>
<div class="overflow-x-auto mt-3">
<div class="overflow-x-auto mt-3">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
@ -78,7 +78,7 @@
</tr>
{% endfor %}
</table>
</div>
</div>
<script defer src="{{'js/admin/orgies.js' | asset}}"></script>
<script defer src="{{'js/admin/orgies.js' | asset}}"></script>
{% endblock %}

View File

@ -1,8 +1,9 @@
{% extends "settings2.html" %}
{% block pagetitle %}Patrons{% endblock %}
{% block content %}
<div class="overflow-x-auto"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>#</th>
<th>Name</th>
@ -10,8 +11,8 @@
<th>Lifetime Donated</th>
<th>Truescore</th>
</tr>
</thead>
{% for user in users %}
</thead>
{% for user in users %}
<tr>
<td>{{loop.index}}</td>
<td>{% include "user_in_table.html" %}</td>
@ -23,7 +24,7 @@
<td data-sort-key="{{user.lifetimedonated}}">${{user.lifetimedonated}}</td>
<td>{{user.truescore}}</td>
</tr>
{% endfor %}
</table>
{% endfor %}
</table>
</div>
{% endblock %}

View File

@ -5,7 +5,7 @@
{% block mobileUserBanner %}{% endblock %}
{% block pagetitle %}Removed Posts{% endblock %}
{% block content %}
<ul class="nav post-nav py-2">
<ul class="nav post-nav py-2">
<li class="nav-item">
<a class="nav-link {% if request.path=="/admin/removed/posts" %} active{% endif %}" href="/admin/removed/posts">
<div>Posts</div>
@ -16,8 +16,8 @@
<div>Comments</div>
</a>
</li>
</ul>
<div class="row no-gutters">
</ul>
<div class="row no-gutters">
<div class="col">
{% block listing %}
<div class="posts">
@ -25,8 +25,8 @@
</div>
{% endblock %}
</div>
</div>
</div>
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
{% include "pagination.html" %}
{% endblock %}

View File

@ -5,7 +5,7 @@
{% block mobileUserBanner %}{% endblock %}
{% block pagetitle %}Reported Posts{% endblock %}
{% block content %}
<ul class="nav post-nav py-2">
<ul class="nav post-nav py-2">
<li class="nav-item">
<a class="nav-link {% if request.path=="/admin/reported/posts" %} active{% endif %}" href="/admin/reported/posts">
<div>Posts</div>
@ -16,9 +16,9 @@
<div>Comments</div>
</a>
</li>
</ul>
</ul>
<div class="row no-gutters">
<div class="row no-gutters">
<div class="col">
{% block listing %}
<div class="posts">
@ -26,9 +26,9 @@
</div>
{% endblock %}
</div>
</div>
</div>
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
{% include "pagination.html" %}
{% endblock %}

View File

@ -1,11 +1,10 @@
{% extends "settings2.html" %}
{% block pagetitle %}Shadowbanned Users{% endblock %}
{% block content %}
<h5 class="my-4">Shadowbanned Users</h5>
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h5 class="my-4">Shadowbanned Users</h5>
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>#</th>
<th>Name</th>
@ -14,8 +13,8 @@
<th>Shadowbanned by</th>
<th>Shadowban reason</th>
</tr>
</thead>
{% for user in users %}
</thead>
{% for user in users %}
<tr>
<td>{{loop.index}}</td>
<td data-sort-key="{{user.username.lower() if user else ''}}">{%- include 'user_in_table.html' -%}</td>
@ -24,9 +23,7 @@
<td><a href="/@{{user.shadowbanner}}">{{user.shadowbanner}}</a></td>
<td>{{user.ban_reason | safe}}</td>
</tr>
{% endfor %}
</table>
{% endfor %}
</table>
</div>
{% endblock %}

View File

@ -3,9 +3,8 @@
{% block pagetitle %}Admins{% endblock %}
{% block content %}
<h5 class="font-weight-bolder text-center pt-2 pb-3"><span>Admins</span></h5>
<div class="overflow-x-auto mt-1">
<h5 class="font-weight-bolder text-center pt-2 pb-3"><span>Admins</span></h5>
<div class="overflow-x-auto mt-1">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
@ -27,8 +26,5 @@
</tr>
{% endfor %}
</table>
</div>
</div>
{% endblock %}

View File

@ -2,22 +2,22 @@
{% block pagetitle %}API{% endblock %}
{% block content %}
<h1 class="my-3">API Guide for Bots</h1>
<p>This page explains how to obtain and use an access token. </p>
<h4>Step 1: Create your Application</h4>
<p>In the <a href="/settings/apps">apps tab of {{SITE_NAME}} settings</a>, fill in and submit the form to request an access token. You will need:</p>
<ul>
<li>an application name</li>
<li>a Redirect URI. May not use HTTP unless using localhost (use HTTPS instead).</li>
<li>a brief description of what your bot is intended to do</li>
</ul>
<p>Don't worry too much about accuracy; you will be able to change all of these later.</p>
<p>{{SITE_NAME}} administrators will review and approve or deny your request for an access token. You'll know when your request has been approved when you get a private message with an access token tied to your account.</p>
<p>DO NOT reveal your Client ID or Access Token. Anyone with these information will be able to pretend to be you. You are responsible for keeping them a secret!</p>
<h4>Step 2: Using the Access Token</h4>
<p>To use the access token, include the following header in subsequent API requests to {{SITE_NAME}}: <code>Authorization: access_token_goes_here</code></p>
<p>Python example:</p>
<pre> import requests
<h1 class="my-3">API Guide for Bots</h1>
<p>This page explains how to obtain and use an access token. </p>
<h4>Step 1: Create your Application</h4>
<p>In the <a href="/settings/apps">apps tab of {{SITE_NAME}} settings</a>, fill in and submit the form to request an access token. You will need:</p>
<ul>
<li>an application name</li>
<li>a Redirect URI. May not use HTTP unless using localhost (use HTTPS instead).</li>
<li>a brief description of what your bot is intended to do</li>
</ul>
<p>Don't worry too much about accuracy; you will be able to change all of these later.</p>
<p>{{SITE_NAME}} administrators will review and approve or deny your request for an access token. You'll know when your request has been approved when you get a private message with an access token tied to your account.</p>
<p>DO NOT reveal your Client ID or Access Token. Anyone with these information will be able to pretend to be you. You are responsible for keeping them a secret!</p>
<h4>Step 2: Using the Access Token</h4>
<p>To use the access token, include the following header in subsequent API requests to {{SITE_NAME}}: <code>Authorization: access_token_goes_here</code></p>
<p>Python example:</p>
<pre> import requests
headers = {"Authorization": "access_token_goes_here"}
@ -26,13 +26,13 @@
r = requests.get(url, headers=headers)
print(r.json())
</pre>
<p>The expected result of this would be a large JSON representation of the posts on the frontpage sorted by the number of comments</p>
</pre>
<p>The expected result of this would be a large JSON representation of the posts on the frontpage sorted by the number of comments</p>
<br>
<br>
<p>Aother python example:</p>
<pre> import requests
<p>Aother python example:</p>
<pre> import requests
headers = {"Authorization": "access_token_goes_here"}
@ -41,35 +41,35 @@
r = requests.get(url, headers=headers)
print(r.json())
</pre>
<p>The expected result of this would be a JSON representation of unread notifications for your account</p>
</pre>
<p>The expected result of this would be a JSON representation of unread notifications for your account</p>
<br>
<hr>
<br>
<br>
<hr>
<br>
<h1 class="my-3">API Guide for Applications</h1>
<p>The OAuth4 authorization flow is used to enable users to authorize third-party applications to access their {{SITE_NAME}} account without having to provide their login information to the application.</p>
<p>This page explains how to obtain API application keys, how to prompt a user for authorization, and how to obtain and use access tokens. </p>
<h4>Step 1: Create your Application</h4>
<p>In the <a href="/settings/apps">apps tab of {{SITE_NAME}} settings</a>, fill in and submit the form to request new API keys. You will need:</p>
<ul>
<li>an application name</li>
<li>a Redirect URI. May not use HTTP unless using localhost (use HTTPS instead).</li>
<li>a brief description of what your application is intended to do</li>
</ul>
<p>Don't worry too much about accuracy; you will be able to change all of these later.</p>
<p>{{SITE_NAME}} administrators will review and approve or deny your request for API keys. You'll know when your request has been approved when you get a private message with an access token tied to your account.</p>
<p>DO NOT reveal your Client ID or Access Token. Anyone with these information will be able to pretend to be you. You are responsible for keeping them a secret!</p>
<h4>Step 2: Prompt Your User for Authorization</h4>
<p>Send your user to <code>{{SITE_FULL}}/authorize/?client_id=YOUR_CLIENT_ID</code></p>
<p>If done correctly, the user will see that your application wants to access their {{SITE_NAME}} account, and be prompted to approve or deny the request.</p>
<h4>Step 3: Catch the redirect</h4>
<p>The user clicks "Authorize". {{SITE_NAME}} will redirect the user's browser to GET the designated redirect URI. The access token URL parameter will be included in the redirect, which your server should process.</p>
<h4>Step 4: Using the Access Token</h4>
<p>To use the access token, include the following header in subsequent API requests to {{SITE_NAME}}: <code>Authorization: access_token_goes_here</code></p>
<p>Python example:</p>
<pre> import requests
<h1 class="my-3">API Guide for Applications</h1>
<p>The OAuth4 authorization flow is used to enable users to authorize third-party applications to access their {{SITE_NAME}} account without having to provide their login information to the application.</p>
<p>This page explains how to obtain API application keys, how to prompt a user for authorization, and how to obtain and use access tokens. </p>
<h4>Step 1: Create your Application</h4>
<p>In the <a href="/settings/apps">apps tab of {{SITE_NAME}} settings</a>, fill in and submit the form to request new API keys. You will need:</p>
<ul>
<li>an application name</li>
<li>a Redirect URI. May not use HTTP unless using localhost (use HTTPS instead).</li>
<li>a brief description of what your application is intended to do</li>
</ul>
<p>Don't worry too much about accuracy; you will be able to change all of these later.</p>
<p>{{SITE_NAME}} administrators will review and approve or deny your request for API keys. You'll know when your request has been approved when you get a private message with an access token tied to your account.</p>
<p>DO NOT reveal your Client ID or Access Token. Anyone with these information will be able to pretend to be you. You are responsible for keeping them a secret!</p>
<h4>Step 2: Prompt Your User for Authorization</h4>
<p>Send your user to <code>{{SITE_FULL}}/authorize/?client_id=YOUR_CLIENT_ID</code></p>
<p>If done correctly, the user will see that your application wants to access their {{SITE_NAME}} account, and be prompted to approve or deny the request.</p>
<h4>Step 3: Catch the redirect</h4>
<p>The user clicks "Authorize". {{SITE_NAME}} will redirect the user's browser to GET the designated redirect URI. The access token URL parameter will be included in the redirect, which your server should process.</p>
<h4>Step 4: Using the Access Token</h4>
<p>To use the access token, include the following header in subsequent API requests to {{SITE_NAME}}: <code>Authorization: access_token_goes_here</code></p>
<p>Python example:</p>
<pre> import requests
headers = {"Authorization": "access_token_goes_here"}
@ -78,13 +78,13 @@
r = requests.get(url, headers=headers)
print(r.json())
</pre>
<p>The expected result of this would be a large JSON representation of the posts on the frontpage sorted by the number of comments</p>
</pre>
<p>The expected result of this would be a large JSON representation of the posts on the frontpage sorted by the number of comments</p>
<br>
<br>
<p>Aother python example:</p>
<pre> import requests
<p>Aother python example:</p>
<pre> import requests
headers = {"Authorization": "access_token_goes_here"}
@ -93,6 +93,6 @@
r = requests.get(url, headers=headers)
print(r.json())
</pre>
<p>The expected result of this would be a JSON representation of unread notifications for your account</p>
</pre>
<p>The expected result of this would be a JSON representation of unread notifications for your account</p>
{% endblock %}

View File

@ -1,7 +1,7 @@
{% extends "default.html" %}
{% block pagetitle %}App{% endblock %}
{% block content %}
<div class="ml-3 mt-4">
<div class="ml-3 mt-4">
<h5>How to install {{SITE_NAME}}'s mobile app</h5>
{% if not v and g.browser == 'chromium' %}
@ -24,6 +24,5 @@
<div class="font-weight-bold mt-4 mb-2">Step 1:</div>
<img loading="lazy" data-nonce="{{g.nonce}}" data-onclick="expandImage()" alt="Step 1" style="height:30vh" src="{{SITE_FULL_IMAGES}}/i/{{SITE_NAME}}/enable-push-notifs.webp">
{% endif %}
</div>
</div>
{% endblock %}

View File

@ -1,9 +1,9 @@
{% extends "default.html" %}
{% block pagetitle %}User Badges{% endblock %}
{% block content %}
<h1 class="mt-3">User Badges</h1>
<div>This page describes the requirements for obtaining all profile badges.</div>
<div class="overflow-x-auto mt-3">
<h1 class="mt-3">User Badges</h1>
<div>This page describes the requirements for obtaining all profile badges.</div>
<div class="overflow-x-auto mt-3">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
@ -30,8 +30,5 @@
</tr>
{% endfor %}
</table>
</div>
</div>
{% endblock %}

View File

@ -1,10 +1,10 @@
{% extends "settings2.html" %}
{% block pagetitle %}Banned Users{% endblock %}
{% block content %}
<h5 class="font-weight-bolder text-center pt-2 pb-3"><span>Banned Users</span></h5>
<div class="overflow-x-auto"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h5 class="font-weight-bolder text-center pt-2 pb-3"><span>Banned Users</span></h5>
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>#</th>
<th>Name</th>
@ -16,8 +16,8 @@
<th>Banned by</th>
<th>Unban in</th>
</tr>
</thead>
{% for user in users %}
</thead>
{% for user in users %}
<tr>
<td>{{loop.index}}</td>
<td>{% include "user_in_table.html" %}</td>
@ -29,9 +29,7 @@
<td>{{user.banned_by | safe}}</td>
<td {% if user.unban_utc %}data-time="{{user.unban_utc}}"{% endif %}></td>
</tr>
{% endfor %}
</table>
{% endfor %}
</table>
</div>
{% endblock %}

View File

@ -1,16 +1,17 @@
{% extends "settings2.html" %}
{% block pagetitle %}Blocks{% endblock %}
{% block content %}
<h5 class="font-weight-bolder text-center pt-2 pb-3"><span>Blocks</span></h5>
<div class="overflow-x-auto mt-3"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h5 class="font-weight-bolder text-center pt-2 pb-3"><span>Blocks</span></h5>
<div class="overflow-x-auto mt-3">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>User</th>
<th>Target</th>
<th>Blocked on</th>
</tr>
</thead>
{% for block in blocks %}
</thead>
{% for block in blocks %}
<tr>
<td>
{% with user = block.user %}
@ -24,6 +25,7 @@
</td>
<td data-time="{{block.created_utc}}"></td>
</tr>
{% endfor %}
</table>
{% endfor %}
</table>
</div>
{% endblock %}

View File

@ -30,8 +30,8 @@ Icon (fa-foo-bar), Color (#ff0000), URL (/casino/roulette) #}
]-%}
{% block content %}
<h2 style="text-transform: uppercase; text-align: center; letter-spacing: 3px; margin-top: 2rem">Casino</h2>
<div id="directory--wrapper">
<h2 style="text-transform: uppercase; text-align: center; letter-spacing: 3px; margin-top: 2rem">Casino</h2>
<div id="directory--wrapper">
{% for game in GAME_INDEX %}
<a class="directory--link" href="{{game[4]}}">
<div class="directory--link-content">
@ -41,5 +41,5 @@ Icon (fa-foo-bar), Color (#ff0000), URL (/casino/roulette) #}
</div>
</a>
{% endfor %}
</div>
</div>
{% endblock %}

View File

@ -5,15 +5,15 @@
{% endblock %}
{% block screen %}
<div id="blackjack-table-deck"></div>
<div id="blackjack-table" data-state="{{game_state}}" style="position: relative">
</div>
<div id="blackjack-table-deck"></div>
<div id="blackjack-table" data-state="{{game_state}}" style="position: relative">
</div>
{% endblock %}
{% block actions %}
<link rel="stylesheet" href="{{('css/casino/blackjack_screen.css') | asset}}">
<link rel="stylesheet" href="{{('css/casino/blackjack_screen.css') | asset}}">
<div class="btn-group">
<div class="btn-group">
<button type="button" id="twentyone-DEAL" class="btn btn-primary twentyone-btn" data-nonce="{{g.nonce}}" data-onclick="deal()">Deal</button>
<button type="button" id="twentyone-HIT" class="btn btn-primary twentyone-btn" data-nonce="{{g.nonce}}" data-onclick="hit()" style="display: none">Hit</button>
<button type="button" id="twentyone-STAY" class="btn btn-primary twentyone-btn" data-nonce="{{g.nonce}}" data-onclick="stay()"
@ -25,21 +25,21 @@
<button type="button" id="twentyone-BUY_INSURANCE" class="btn btn-primary twentyone-btn" data-nonce="{{g.nonce}}" data-onclick="buyInsurance()"
style="display: none">Buy
Insurance</button>
</div>
</div>
<div id="twentyone-SPLIT_ACTIONS" class="btn-group" style="display: none">
<div id="twentyone-SPLIT_ACTIONS" class="btn-group" style="display: none">
<h5>Split</h5>
<button type="button" id="twentyone-HIT_SPLIT" class="btn btn-primary twentyone-btn" data-nonce="{{g.nonce}}" data-onclick="hitSplit()" style="display: none">Hit</button>
<button type="button" id="twentyone-STAY_SPLIT" class="btn btn-primary twentyone-btn" data-nonce="{{g.nonce}}" data-onclick="staySplit()"
style="display: none">Stay</button>
</div>
</div>
{% endblock %}
{% block leaders %}
Blackjack
Blackjack
{% endblock %}
{% block feed %}
Blackjack
Blackjack
{% endblock %}

View File

@ -1,12 +1,12 @@
{% extends "default.html" %}
{% block pagetitle %}{{game.capitalize()}}{% endblock %}
{% block content %}
<link rel="stylesheet" href="{{('css/casino/game_screen.css') | asset}}">
<script defer src="{{'js/casino/game_screen.js' | asset}}"></script>
<link rel="stylesheet" href="{{('css/casino/game_screen.css') | asset}}">
<script defer src="{{'js/casino/game_screen.js' | asset}}"></script>
{% block script %}{% endblock %}
{% block script %}{% endblock %}
<div id="casino-game-wrapper" data-game="{{game}}" class="container-fluid" style="max-width: 500px">
<div id="casino-game-wrapper" data-game="{{game}}" class="container-fluid" style="max-width: 500px">
<div class="row row-cols-1">
<div class="col game_screen-title">
<h3>{{game}}</h3>
@ -104,5 +104,5 @@
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -2,7 +2,7 @@
{% block pagetitle %}You're in rehab!{% endblock %}
{% block pagetype %}casino-in-rehab{% endblock %}
{% block content %}
<div style="text-transform: uppercase; letter-spacing: 2px; display: flex; flex-direction: column; align-items: center">
<div style="text-transform: uppercase; letter-spacing: 2px; display: flex; flex-direction: column; align-items: center">
<div style="margin-top: 3rem">
<h2>No one was there for Britney…</h2>
</div>
@ -10,5 +10,5 @@
<h2>…but we're here for you. You've been checked into Rehab.</h2>
</div>
<img loading="lazy" src="{{SITE_FULL_IMAGES}}/i/rDrama/brit.webp" style="text-align: center">
</div>
</div>
{% endblock %}

View File

@ -11,11 +11,11 @@
{% endblock %}
{% block actiontext %}
Bets
Bets
{% endblock %}
{% block actions %}
<div id="roulette-bets">
<div id="roulette-bets">
<div class="roulette-bet-summary">
<div class="roulette-bet-summary--heading">
<div class="roulette-poker-chip">
@ -34,13 +34,13 @@ Bets
the number will be even.</li>
</ul>
</div>
</div>
</div>
<div class="game_screen-title">
<div class="game_screen-title">
<h5>How to Bet</h5>
<hr>
</div>
<table class="table">
</div>
<table class="table">
<thead>
<tr>
<th>Bet</th>
@ -106,5 +106,5 @@ Bets
</td>
</tr>
</tbody>
</table>
</table>
{% endblock %}

View File

@ -1,10 +1,10 @@
{% extends "settings2.html" %}
{% block pagetitle %}Chuds{% endblock %}
{% block content %}
<h5 class="my-4">Chudded Users</h5>
<div class="overflow-x-auto"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h5 class="my-4">Chudded Users</h5>
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>#</th>
<th>Name</th>
@ -15,8 +15,8 @@
<th>Chudded by</th>
<th>Unchud in</th>
</tr>
</thead>
{% for user in users %}
</thead>
{% for user in users %}
<tr>
<td>{{loop.index}}</td>
<td>{% include "user_in_table.html" %}</td>
@ -26,10 +26,8 @@
<td>{{user.truescore}}</td>
<td>{{user.chudder | safe}}</td>
<td {% if user.chud != 1 %}data-time="{{user.chud}}"{% endif %}></td>
</tr>
{% endfor %}
</table>
</tr>
{% endfor %}
</table>
</div>
{% endblock %}

View File

@ -1,23 +1,23 @@
{% extends "default.html" %}
{% block pagetitle %}!commenters{% endblock %}
{% block content %}
<h5 class="my-3">!commenters</h5>
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h5 class="my-3">!commenters</h5>
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>#</th>
<th>Name</th>
<th>First commented on</th>
</tr>
</thead>
{% for user, comment_id, comment_created_utc in users %}
</thead>
{% for user, comment_id, comment_created_utc in users %}
<tr>
<td>{{loop.index}}</td>
<td>{% include "user_in_table.html" %}</td>
<td><a href="/comment/{{comment_id}}" data-time="{{comment_created_utc}}"></td>
</tr>
{% endfor %}
</table>
{% endfor %}
</table>
</div>
{% endblock %}

View File

@ -14,18 +14,16 @@
{% set disable_votes = (request.path.startswith('/@') and not wall) and v and v.admin_level < PERMS['ENABLE_VOTE_BUTTONS_ON_USER_PAGE'] %}
{% macro single_comment(c, level=1, collapse=False) %}
{% if can_see(v, c) %}
{% set ups=c.upvotes %}
{% set downs=c.downvotes %}
{% set score=ups-downs %}
{% if can_see(v, c) %}
{% set ups=c.upvotes %}
{% set downs=c.downvotes %}
{% set score=ups-downs %}
{% if render_replies %}
{% if render_replies %}
{% set replies=c.replies(sort=sort) %}
{% endif %}
{% endif %}
{% if (c.is_banned or c.deleted_utc) and not (v and v.admin_level >= PERMS['POST_COMMENT_MODERATION']) and not (v and v.id==c.author_id) %}
{% if (c.is_banned or c.deleted_utc) and not (v and v.admin_level >= PERMS['POST_COMMENT_MODERATION']) and not (v and v.id==c.author_id) %}
<div id="comment-{{c.id}}" class="comment {% if not (v and v.id == author_id) and not (v and v.admin_level) and not comment_info %}collapsed{% endif %}">
<span class="comment-collapse-line" style="border-color: #{{c.author.name_color}}" data-nonce="{{g.nonce}}" data-onclick="collapse_comment('{{c.id}}')"></span>
<div class="comment-body">
@ -50,21 +48,20 @@
{% endif %}
</div>
</div>
{% else %}
{% else %}
{% set score=c.score %}
{% set score=c.score %}
{% if v %}
{% if v %}
{% set voted=c.voted %}
{% if not voted and v.id == c.author_id %}
{% set voted=1 %}
{% endif %}
{% else %}
{% else %}
{% set voted=-2 %}
{% endif %}
{% endif %}
{% if standalone and level==1 %}
<div id="post-info-{{c.id}}" class="text-break post-info mb-1 mr-2 {% if request.path.startswith('/notifications') %}mt-5{% elif request.path == '/search/messages' %}mt-6{% else %}mt-3{% endif %}">
{% if standalone and level==1 %}
<div id="post-info-{{c.id}}" class="text-break post-info mb-1 mr-2 {% if request.path.startswith('/notifications') %}mt-5{% elif request.path == '/search/messages' %}mt-6{% else %}mt-3{% endif %}">
{% if c.parent_post and c.post.nsfw %}
<span class="badge badge-danger text-small-extra mr-1">NSFW</span>
{% endif %}
@ -96,24 +93,22 @@
{% else %}
<span class="font-weight-bold">Sent to <a href="/@{{c.senttouser.username}}">@{{c.senttouser.username}}</a></span>
{% endif %}
</span>
</div>
{% endif %}
</span>
</div>
{% endif %}
{% if c.parent_comment and c.parent_comment.sentto %}
{% if c.parent_comment and c.parent_comment.sentto %}
{% set isreply = True %}
{% else %}
{% else %}
{% set isreply = False %}
{% endif %}
{% endif %}
<div id="comment-{{c.id}}" class="anchor comment {% if wall and level == 1 and not (comment_info and c == comment_info) %}mt-5{% elif wall %}mt-4{% elif standalone and level==1 %}mt-0{% endif %} {% if collapse or c.collapse_for_user(v, comment_info, request.full_path) %}collapsed{% endif %}" style="{% if isreply %}padding-left:0!important{% endif %}">
<div id="comment-{{c.id}}" class="anchor comment {% if wall and level == 1 and not (comment_info and c == comment_info) %}mt-5{% elif wall %}mt-4{% elif standalone and level==1 %}mt-0{% endif %} {% if collapse or c.collapse_for_user(v, comment_info, request.full_path) %}collapsed{% endif %}" style="{% if isreply %}padding-left:0!important{% endif %}">
{% if not isreply %}
<span class="comment-collapse-line" style="border-color: {% if c.ghost %}var(--primary){% else %}#{{c.author.name_color}}{% endif %}" data-nonce="{{g.nonce}}" data-onclick="collapse_comment('{{c.id}}')"></span>
{% endif %}
<div class="comment-body">
<div id="{% if comment_info and comment_info.id == c.id %}context{% else %}comment-{{c.id}}-only{% endif %}" class="{% if c.unread %}unread{% endif %} comment-{{c.id}}-only comment-anchor {% if comment_info and comment_info.id == c.id %}context{% endif %}{% if c.is_banned %} banned{% endif %}{% if c.deleted_utc %} deleted{% endif %}">
<div class="user-info">
<span class="comment-collapse-icon" data-nonce="{{g.nonce}}" data-onclick="collapse_comment('{{c.id}}')"></span>
@ -560,7 +555,7 @@
</div>
<div class="modal fade d-md-none" id="actionsModal-{{c.id}}" tabindex="-1">
<div class="modal fade d-md-none" id="actionsModal-{{c.id}}" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
@ -641,14 +636,9 @@
</div>
</div>
</div>
</div>
</div>
{% if v and v.admin_level >= PERMS['POST_COMMENT_MODERATION'] %}
{% if v and v.admin_level >= PERMS['POST_COMMENT_MODERATION'] %}
<div class="modal fade d-md-none" id="adminModal-{{c.id}}" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
@ -709,12 +699,10 @@
</div>
</div>
</div>
{% endif %}
</div>
{% endif %}
{% endif %}
{% endif %}
</div>
{% endif %}
{% endif %}
{% endmacro %}
{% for comment in comments %}

View File

@ -1,12 +1,12 @@
{%- extends 'root.html' -%}
{% block body_attributes %}id="{% if request.path != '/comments' %}{% block pagetype %}frontpage{% endblock %}{% endif %}" class="has_header"{% endblock %}
{% block body %}
{% block pulltorefresh %}
<div id="pulltorefresh">
{% block pulltorefresh %}
<div id="pulltorefresh">
<img id="pulltorefresh-img" src="{{SITE_FULL_IMAGES}}/e/marseyunamused.webp">
</div>
{% endblock %}
{% block banner %}
</div>
{% endblock %}
{% block banner %}
{% include "modals/expanded_image.html" %}
{% if err or '@' not in request.path %}
{% if IS_FISTMAS() and not (hole and hole.has_banners) %}
@ -76,19 +76,17 @@
</a>
{% endif %}
{% endif %}
{% endblock %}
{% include "header.html" %}
{% block mobileUserBanner %}
{% endblock %}
{% if IS_HOMOWEEN() %}
{% block hauntBg %}
{% endblock %}
{% endif %}
<div class="container">
{% include "header.html" %}
{% block mobileUserBanner %}{% endblock %}
{% if IS_HOMOWEEN() %}
{% block hauntBg %}{% endblock %}
{% endif %}
<div class="container">
<div class="row justify-content-around" id="main-content-row">
<div class="order-first col h-100 {% block customPadding %}{% if request.path.startswith('/@') %}user-gutters{% else %}custom-gutters{% endif %}{% endblock %}" id="main-content-col">
{% block desktopUserBanner %}{% endblock %}
@ -107,21 +105,21 @@
{% endif %}
{% endblock %}
</div>
</div>
{% block mobilenavbar %}{% include "mobile_navigation_bar.html" %}{% endblock %}
{% block actionsModal %}{% endblock %}
{% block reportCommentModal %}{% endblock %}
{% block GIFtoast %}{% endblock %}
{% block GIFpicker %}{% endblock %}
<div class="toast clipboard" id="toast-success" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
</div>
{% block mobilenavbar %}{% include "mobile_navigation_bar.html" %}{% endblock %}
{% block actionsModal %}{% endblock %}
{% block reportCommentModal %}{% endblock %}
{% block GIFtoast %}{% endblock %}
{% block GIFpicker %}{% endblock %}
<div class="toast clipboard" id="toast-success" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast-body text-center">
<i class="fas fa-check-circle text-success mr-2"></i>Link copied to clipboard
</div>
</div>
<script defer src="{{'js/vendor/lozad.js' | asset}}"></script>
<script defer src="{{'js/vendor/lite-youtube.js' | asset}}"></script>
</div>
<script defer src="{{'js/vendor/lozad.js' | asset}}"></script>
<script defer src="{{'js/vendor/lite-youtube.js' | asset}}"></script>
{% if (v and v.spider) or (p and p.award_count("shit", v)) or (p and p.award_count("fireflies", v)) %}
{% if (v and v.spider) or (p and p.award_count("shit", v)) or (p and p.award_count("fireflies", v)) %}
<script defer src="{{'js/vendor/critters.js' | asset}}"></script>
{% if v and v.spider %}
@ -137,10 +135,9 @@
<input hidden id="fireflies_num" value="{{p.award_count('fireflies', v)}}">
<script defer src="{{'js/fireflies.js' | asset}}"></script>
{% endif %}
{% endif %}
{% endif %}
{% if IS_EVENT() %}
{% if IS_EVENT() %}
{% include "events/shared/music.html" %}
{% endif %}
{% endif %}
{% endblock %}

View File

@ -95,15 +95,15 @@
{%- endif -%}
{% block content %}
<div id="directory--wrapper">
{% for thread in DIRECTORY %}
<a class="directory--link" href="{{thread[4]}}">
<div id="directory--wrapper">
{% for thread in DIRECTORY %}
<a class="directory--link" href="{{thread[4]}}">
<div class="directory--link-content">
<i class="directory--link--icon fas {{thread[2]}}" style="color:{{thread[3]}}"></i>
<div class="directory--link--title">{{thread[0]|safe}}</div>
<div class="directory--link--description">{{thread[1]|safe}}</div>
</div>
</a>
{% endfor %}
</div>
</a>
{% endfor %}
</div>
{% endblock %}

View File

@ -2,7 +2,7 @@
{% block pagetitle %}{{code}} {{title}}{% endblock %}
{% block pagetype %}error-{{code}}{% endblock %}
{% block content %}
<div class="row justify-content-center">
<div class="row justify-content-center">
<div class="col-10 col-md-5">
<div class="text-center px-3 my-5">
{% if img -%}
@ -16,5 +16,5 @@
<div><a href="/" class="btn btn-primary mt-3">Go to frontpage</a></div>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -2,7 +2,7 @@
{% block pagetitle %}NSFW{% endblock %}
{% block pagetype %}error-451{% endblock %}
{% block content %}
<div class="row justify-content-center">
<div class="row justify-content-center">
<div class="col col-md-5">
<div class="text-center px-3 mt-3">
<img alt=":#marseytwerking:" loading="lazy" src="{{SITE_FULL_IMAGES}}/e/marseytwerking.webp">
@ -18,5 +18,5 @@
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -1,11 +1,11 @@
{% extends "default.html" %}
{% block pagetitle %}Formatting{% endblock %}
{% block content %}
<h3 class="ml-2 mt-4">Markdown Formatting</h3>
<h3 class="ml-2 mt-4">Markdown Formatting</h3>
<div class="ml-2">You can use Markdown formatting:</div>
<div class="ml-2">You can use Markdown formatting:</div>
<div class="overflow-x-auto mt-3">
<div class="overflow-x-auto mt-3">
<table id="formatting-table" class="table table-striped generate-copy-buttons">
<thead class="bg-primary text-white">
<tr>
@ -39,8 +39,8 @@
<td>Horizontal Rule</td>
<td>
<pre>Text 1
---
Text 2</pre>
---
Text 2</pre>
</td>
<td>
Text 1
@ -425,48 +425,48 @@ Text 2</pre>
{%- endif %}
</tbody>
</table>
</div>
</div>
<hr class="my-6">
<hr class="my-6">
<h1>HTML Formatting</h1>
<h1>HTML Formatting</h1>
And we allow custom HTML in most places:
And we allow custom HTML in most places:
<h4 class="mt-3">Allowed Tags</h4>
<h4 class="mt-3">Allowed Tags</h4>
<ul>
<ul>
{% for tag in allowed_tags %}
<li>{{tag}}</li>
{% endfor %}
</ul>
</ul>
<h5 class="mt-4">Allowed Styles</h5>
<h5 class="mt-4">Allowed Styles</h5>
<ul>
<ul>
{% for style in allowed_styles %}
<li>{{style}}</li>
{% endfor %}
</ul>
</ul>
<hr class="my-6">
<hr class="my-6">
<h1 id="approved">Approved Media Hosts</h1>
<h1 id="approved">Approved Media Hosts</h1>
Image files, video files, and audio files from these sources will get embedded automatically:
Image files, video files, and audio files from these sources will get embedded automatically:
<ul class="mt-3">
<ul class="mt-3">
{% for host in approved_embed_hosts %}
<li>{{host}}</li>
{% endfor %}
</ul>
</ul>
<div class="toast clipboard" id="toast-success" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast clipboard" id="toast-success" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast-body text-center">
<i class="fas fa-check-circle text-success mr-2"></i>Text copied to clipboard
</div>
</div>
</div>
<script defer src="{{'js/vendor/clipboard.js' | asset}}"></script>
<script defer src="{{'js/formatting.js' | asset}}"></script>
<script defer src="{{'js/vendor/clipboard.js' | asset}}"></script>
<script defer src="{{'js/formatting.js' | asset}}"></script>
{% endblock %}

View File

@ -1,22 +1,22 @@
{% extends "settings2.html" %}
{% block pagetitle %}Grassed Users{% endblock %}
{% block content %}
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>#</th>
<th>Name</th>
<th>Grasser</th>
</tr>
</thead>
{% for user in users %}
</thead>
{% for user in users %}
<tr>
<td>{{loop.index}}</td>
<td>{% include "user_in_table.html" %}</td>
<td>{{user.ban_reason.split('by ')[1] | safe}}</td>
</tr>
{% endfor %}
</table>
{% endfor %}
</table>
</div>
{% endblock %}

View File

@ -1,8 +1,7 @@
{% extends "default.html" %}
{% block pagetitle %}!{{group}}{% endblock %}
{% block content %}
{% if v.id != group.owner.id %}
{% if v.id != group.owner.id %}
<button id="leave-{{group}}" type="button" class="mt-4 btn btn-danger btn-block {% if v.id not in group.membership_user_ids %}d-none{% endif %}" data-nonce="{{g.nonce}}" data-onclick="postToastSwitch(this,'/!{{group}}/leave','leave-{{group}}','apply-{{group}}','d-none')">
{%- if v.id in group.member_ids or group.name == 'verifiedrich' -%}
Leave
@ -12,10 +11,10 @@
</button>
<button id="apply-{{group}}" type="button" class="mt-4 {% if v.id in group.membership_user_ids %}d-none{% endif %} btn btn-success btn-block" data-nonce="{{g.nonce}}" data-onclick="postToastSwitch(this,'/!{{group}}/apply','leave-{{group}}','apply-{{group}}','d-none')">{% if group.name != 'verifiedrich' %}Apply to {% endif %}Join</button>
{% endif %}
{% endif %}
<br>
{% macro process_memberships(memberships, name) %}
<br>
{% macro process_memberships(memberships, name) %}
<h5 class="my-3">!{{group}} {{name}}</h5>
<div class="overflow-x-auto mt-1">
@ -82,15 +81,14 @@
</tbody>
</table>
</div>
{% endmacro %}
{% endmacro %}
{% if v.mods_group(group) %}
{% if v.mods_group(group) %}
{{process_memberships(applications, 'applications')}}
{{process_memberships(members, 'members')}}
<script defer src="{{'js/group_members_owner.js' | asset}}"></script>
{% else %}
{% else %}
{{process_memberships(members, 'members')}}
{{process_memberships(applications, 'applications')}}
{% endif %}
{% endif %}
{% endblock %}

View File

@ -1,7 +1,7 @@
{% extends "default.html" %}
{% block pagetitle %}Ping Groups{% endblock %}
{% block content %}
<div class="px-3">
<div class="px-3">
<h3 class="mt-3">Create Ping Group</h3>
<form class="mt-3" action="/create_group" method="post" data-nonce="{{g.nonce}}" data-onsubmit="sendFormXHRReload(this)">
<div class="container pb-0" style="background-color: transparent !important">
@ -61,6 +61,5 @@
</tbody>
</table>
</div>
</div>
</div>
{% endblock %}

View File

@ -101,5 +101,5 @@
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
{% include "pagination.html" %}
{% endblock %}

View File

@ -1,22 +1,23 @@
{% extends "default.html" %}
{% block pagetitle %}Users {{verb}} /h/{{hole}}{% endblock %}
{% block content %}
<h5 class="mt-3">Users {{verb}} /h/{{hole}}</h5>
<div class="overflow-x-auto mt-1"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h5 class="mt-3">Users {{verb}} /h/{{hole}}</h5>
<div class="overflow-x-auto mt-1">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>#</th>
<th>Name</th>
<th>{{verb.title()}} since</th>
</tr>
</thead>
{% for user, object in users %}
</thead>
{% for user, object in users %}
<tr>
<td>{{loop.index}}</td>
<td>{% include "user_in_table.html" %}</td>
<td {% if object.created_utc %}data-time="{{object.created_utc}}"{% endif %}></td>
</tr>
{% endfor %}
</table>
{% endfor %}
</table>
</div>
{% endblock %}

View File

@ -1,7 +1,7 @@
{% extends "default.html" %}
{% block pagetitle %}Create a hole{% endblock %}
{% block content %}
<form class="mt-3" id="submitform" action="/create_hole" method="post" data-nonce="{{g.nonce}}">
<form class="mt-3" id="submitform" action="/create_hole" method="post" data-nonce="{{g.nonce}}">
<div class="container">
<div class="row justify-content-center mb-4 pb-6">
<div class="col col-md-6 p-3 py-md-0">
@ -25,5 +25,5 @@
</div>
</div>
</div>
</form>
</form>
{% endblock %}

View File

@ -1,9 +1,10 @@
{% extends "default.html" %}
{% block pagetitle %}/h/{{hole}} Exiles{% endblock %}
{% block content %}
<h5 class="my-4 ml-2">Users exiled from /h/{{hole}}</h5>
<div class="overflow-x-auto"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h5 class="my-4 ml-2">Users exiled from /h/{{hole}}</h5>
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>#</th>
<th>Name</th>
@ -11,8 +12,8 @@
<th>Exiled since</th>
<th class="disable-sort-click"></th>
</tr>
</thead>
{% for user, exile in users %}
</thead>
{% for user, exile in users %}
<tr>
<td>{{loop.index}}</td>
<td>{% include "user_in_table.html" %}</td>
@ -31,7 +32,7 @@
{% endif %}
</td>
</tr>
{% endfor %}
</table>
{% endfor %}
</table>
</div>
{% endblock %}

View File

@ -1,8 +1,8 @@
{% extends "default.html" %}
{% block pagetitle %}Hole List{% endblock %}
{% block content %}
<h5 class="mt-3 mb-1">Hole List</h5>
<div class="overflow-x-auto">
<h5 class="mt-3 mb-1">Hole List</h5>
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
@ -30,8 +30,5 @@
</tr>
{% endfor %}
</table>
</div>
</div>
{% endblock %}

View File

@ -1,20 +1,19 @@
{% extends "default.html" %}
{% block pagetitle %}/h/{{hole}} Mods{% endblock %}
{% block content %}
<script defer src="{{'js/remove_mod.js' | asset}}"></script>
<script defer src="{{'js/remove_mod.js' | asset}}"></script>
<h5 class="mt-2">/h/{{hole}} Mods</h5>
<div class="overflow-x-auto mt-1"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h5 class="mt-2">/h/{{hole}} Mods</h5>
<div class="overflow-x-auto mt-1"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>#</th>
<th>Name</th>
<th>Mod since</th>
<th class="disable-sort-click"></th>
</tr>
</thead>
{% for user, mod in users %}
</thead>
{% for user, mod in users %}
<tr>
<td>{{loop.index}}</td>
<td>{% include "user_in_table.html" %}</td>
@ -29,16 +28,15 @@
{% endif %}
</td>
</tr>
{% endfor %}
{% endfor %}
</table>
</table>
{% if v.mods(hole.name) %}
{% if v.mods(hole.name) %}
<form action="/h/{{hole}}/add_mod" method="post" data-nonce="{{g.nonce}}" data-onsubmit="sendFormXHRReload(this)">
<input hidden name="formkey" value="{{v|formkey}}">
<input class="form-control" style="display:inline;width:250px" autocomplete="off" type="text" name="user" class="form-control" placeholder="Enter username..">
<input autocomplete="off" class="btn btn-primary ml-auto" type="submit" value="Add Mod" style="margin-bottom: 5px">
</form>
{% endif %}
{% endif %}
{% endblock %}

View File

@ -2,11 +2,10 @@
{% block pagetitle %}/h/{{hole}} Settings{% endblock %}
{% block content %}
<div class="title mt-5">
<div class="title mt-5">
<label class="text-lg" for="stealth">Stealth Mode</label>
</div>
<div class="d-inline-block w-lg-100 pt-1 pt-lg-3">
</div>
<div class="d-inline-block w-lg-100 pt-1 pt-lg-3">
<div class="custom-control custom-switch">
<input autocomplete="off" type="checkbox" class="custom-control-input" id="stealth" name="stealth" {% if hole.stealth %}checked{% endif %} data-nonce="{{g.nonce}}" data-onchange="postToastSwitch(this,'/h/{{hole}}/stealth')">
<label class="custom-control-label" for="stealth"></label>
@ -14,10 +13,10 @@
<span class="text-small text-muted">
Make this hole blocked by default (users can visit it to unblock it).
</span>
</div>
</div>
<h5 class="mt-5">Marsey</h5>
<div class="settings-section rounded">
<h5 class="mt-5">Marsey</h5>
<div class="settings-section rounded">
<img loading="lazy" alt="sub marsey picture" src="{{hole.marsey_url}}" style="max-width:100px">
<form class="d-inline-block" action="/h/{{hole}}/marsey_image" method="post" enctype="multipart/form-data">
<input hidden name="formkey" value="{{v|formkey}}">
@ -28,10 +27,10 @@
<div class="text-small text-muted mt-3">
All image files are supported. Max file size is {% if v and v.patron %}16{% else %}8{% endif %} MB.
</div>
</div>
</div>
<h5 class=" mt-5">Sidebar Picture</h5>
<div class="settings-section rounded">
<h5 class=" mt-5">Sidebar Picture</h5>
<div class="settings-section rounded">
<img class="mr-3" loading="lazy" alt="sub sidebar picture" src="{{hole.sidebar_url}}" style="max-width:min(300px,100%)">
<form class="d-inline-block mt-2" action="/h/{{hole}}/sidebar_image" method="post" enctype="multipart/form-data">
<input hidden name="formkey" value="{{v|formkey}}">
@ -42,10 +41,10 @@
<div class="text-small text-muted mt-3">
All image files are supported. Max file size is {% if v and v.patron %}16{% else %}8{% endif %} MB.
</div>
</div>
</div>
<h5 class="mt-5">Banners</h5>
<div class="settings-section rounded hole-banner-update-section">
<h5 class="mt-5">Banners</h5>
<div class="settings-section rounded hole-banner-update-section">
{% for banner in hole.banner_urls %}
<section id="hole-banner-update-{{loop.index - 1}}" class="mt-5 d-block hole-settings-subsection">
<img class="mr-3" loading="lazy" alt="/h/{{hole.name}} banner" src="{{banner}}" style="max-height:300px;max-width:100%">
@ -70,9 +69,9 @@
</div>
</section>
{% endif %}
</div>
</div>
<div class="row my-5 pt-5">
<div class="row my-5 pt-5">
<div class="col col-md-8">
<div class="settings">
<div id="description">
@ -91,9 +90,9 @@
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row">
<div class="col col-md-8">
<div class="settings">
<div id="description">
@ -112,5 +111,5 @@
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -1,4 +1,5 @@
{% extends "default.html" %}
{% block title %}
{% if hole %}
<title>/h/{{hole.name}}</title>
@ -12,36 +13,40 @@
{{super()}}
{% endif %}
{% endblock %}
{% block pagetitle %}{{SITE_NAME if not hole else '/h/' ~ hole.name}}{% endblock %}
{% block head_final %}
{% set preview = hole.siderbarurl if hole and hole.sidebarurl else hole.bannerurl %}
{% if hole %}
<meta property="og:type" content="article">
<meta property="og:title" content="/h/{{hole}}">
<meta property="og:site_name" content="{{SITE}}">
<meta property="og:image" content="{{preview}}">
<meta property="og:url" content="{{request.full_path}}">
<meta property="og:author" name="author" content="{{SITE_FULL}}">
{% set preview = hole.siderbarurl if hole and hole.sidebarurl else hole.bannerurl %}
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="{{SITE_FULL}}">
<meta name="twitter:title" content="/h/{{hole.name}}">
<meta name="twitter:creator" content="{{SITE_FULL}}">
<meta name="twitter:image" content="{{preview}}">
<meta name="twitter:url" content="{{request.full_path}}">
{% endif %}
{% if hole.sidebar %}
{% if hole %}
<meta property="og:type" content="article">
<meta property="og:title" content="/h/{{hole}}">
<meta property="og:site_name" content="{{SITE}}">
<meta property="og:image" content="{{preview}}">
<meta property="og:url" content="{{request.full_path}}">
<meta property="og:author" name="author" content="{{SITE_FULL}}">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="{{SITE_FULL}}">
<meta name="twitter:title" content="/h/{{hole.name}}">
<meta name="twitter:creator" content="{{SITE_FULL}}">
<meta name="twitter:image" content="{{preview}}">
<meta name="twitter:url" content="{{request.full_path}}">
{% endif %}
{% if hole.sidebar %}
<meta property="og:description" name="description" content="{{hole.sidebar}}">
<meta name="twitter:description" content="{{hole.sidebar}}">
{% endif %}
{% endif %}
{% endblock %}
{% block desktopBanner %}
{%- set search_placeholder = "Search" -%}
{%- if hole -%}
{%- set search_placeholder = "Search" -%}
{%- if hole -%}
{%- set search_placeholder = "Search (try 'hole:" ~ hole.name ~ "')" -%}
{%- endif -%}
<div class="row" style="overflow: visible;padding-top:5px">
{%- endif -%}
<div class="row" style="overflow: visible;padding-top:5px">
<div class="col">
<form id="searchform" class="form-inline d-md-none search flex-nowrap mt-2" action="/search/posts" method="get">
<input autocomplete="off" class="form-control form-control-sm w-100" type="search" placeholder="{{search_placeholder}}" name="q">
@ -88,43 +93,39 @@
{% endblock %}
</div>
</div>
</div>
</div>
{% endblock %}
{% block PseudoSubmitForm %}{% endblock %}
{% block content %}
<div class="row no-gutters {% if listing %}mt-md-3{% elif not listing %}my-md-3{% endif %}">
<div class="row no-gutters {% if listing %}mt-md-3{% elif not listing %}my-md-3{% endif %}">
<div class="col-12">
<div class="posts">
{% include "post_listing.html" %}
</div>
</div>
</div>
</div>
{% endblock %}
{% block pagenav %}
{% if listing %}
{% if listing %}
{% include "pagination.html" %}
{% endif %}
{% endif %}
{% if request.path == '/' and v %}
{% if request.path == '/' and v %}
<script defer src="{{'js/register_service_worker.js' | asset}}"></script>
{% endif %}
{% endif %}
{% if request.path == '/' and g.browser != 'webview' and time.time() > session.get('tooltip_dismissed',0)+86400*30 %}
{% if request.path == '/' and g.browser != 'webview' and time.time() > session.get('tooltip_dismissed',0)+86400*30 %}
<div id="mobile-prompt-container" class="fixed-top">
<div id="mobile-prompt" data-bs-toggle="tooltip" data-bs-container="#mobile-prompt-container" data-bs-placement="top" data-bs-trigger="click" data-bs-html="true" title="<i class='dismiss-beg fas fa-x'></i>Click me to install the {{SITE_NAME}} mobile app{% if g.browser == 'iphone' %} and be able to enable push notifications{% endif %}"></div>
</div>
<script defer src="{{'js/mobile_prompt.js' | asset}}"></script>
{% endif %}
{% endif %}
{% if FP and request.path == '/' and v and not v.fp %}
{% if FP and request.path == '/' and v and not v.fp %}
<script defer src="{{'js/fp.js' | asset}}"></script>
{% endif %}
{% endif %}
{% endblock %}

View File

@ -29,5 +29,5 @@
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
{% include "pagination.html" %}
{% endblock %}

View File

@ -24,9 +24,9 @@
{% endmacro %}
{% macro leaderboard_table(lb) %}
<h5 class="font-weight-bolder text-center pt-2 pb-3"><span id="leaderboard-{{lb.html_id}}">{% if lb.desc %}Top{% else %}Bottom{% endif %} {{lb.limit}} {% if lb.table_header_name != 'most blocked' %}by{% endif %} {{lb.table_header_name}}</span></h5>
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<h5 class="font-weight-bolder text-center pt-2 pb-3"><span id="leaderboard-{{lb.html_id}}">{% if lb.desc %}Top{% else %}Bottom{% endif %} {{lb.limit}} {% if lb.table_header_name != 'most blocked' %}by{% endif %} {{lb.table_header_name}}</span></h5>
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>#</th>
@ -46,8 +46,8 @@
{{format_user_in_table(v, "style=\"border-top:2px solid var(--primary)\"", lb.v_position, lb.v_value, lb.user_relative_url)}}
{% endif %}
</tbody>
</table>
</div>
</table>
</div>
{% endmacro %}
{% for lb in leaderboards %}

View File

@ -1,7 +1,7 @@
{% extends "settings2.html" %}
{% block pagetitle %}Moderation Log{% endblock %}
{% block content %}
<div class="row justify-content-around">
<div class="row justify-content-around">
<div class="col h-100">
<div class="justify-content-between">
<div>
@ -81,12 +81,12 @@
</div>
{% include "pagination.html" %}
</div>
</div>
</div>
<div class="toast clipboard" id="toast-success" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast clipboard" id="toast-success" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast-body text-center">
<i class="fas fa-check-circle text-success mr-2"></i>Link copied to clipboard
</div>
</div>
<script defer src="{{'js/vendor/clipboard.js' | asset}}"></script>
</div>
<script defer src="{{'js/vendor/clipboard.js' | asset}}"></script>
{% endblock %}

View File

@ -3,7 +3,7 @@
{% block authtitle %}Reset your password.{% endblock %}
{% block authtext %}If there's an email address associated with your account, you can use it to recover your {{SITE_NAME}} account and change your password.{% endblock %}
{% block content %}
<div id="login-form">
<div id="login-form">
<form action="/forgot" method="post" class="mt-3">
<label for="username" class="mt-3">Username</label>
<input autocomplete="off" class="form-control" id="username" type="text" name="username" required>
@ -11,5 +11,5 @@
<input type="email" autocomplete="off" class="form-control" id="password" name="email" required>
<input autocomplete="off" class="btn btn-primary login w-100 mt-3" type="submit" value="Send recovery link">
</form>
</div>
</div>
{% endblock %}

View File

@ -8,7 +8,7 @@
{% block authtitle %}Welcome back.{% endblock %}
{% block authtext %}Glad to have you back!{% endblock %}
{% block content %}
<div id="login-form">
<div id="login-form">
{%- set error_text -%}
Incorrect username, email address, or password.<br>
<a href="/forgot" class="alert-link">Forgot password?</a>
@ -28,5 +28,5 @@
Don't have an account? <a href="/signup{{'?redirect='+redirect if redirect else ''}}" class="font-weight-bold toggle-login">Sign up</a>
</div>
</form>
</div>
</div>
{% endblock %}

View File

@ -6,12 +6,12 @@
{% set root_scope.include_cf_2fa_verify = false %}
{% endblock %}
{% block content %}
<div id="login-form">
<div id="login-form">
<h2>Two-step login</h2>
<p class="text-muted mb-md-5">To login, please enter the 6-digit verification code generated in your authenticator app.</p>
{% if failed %}{{macros.alert('Invalid verification code. Please try again.', true)}}{% endif %}
</div>
<form action="/login" method="post" class="mt-md-3" id="login">
</div>
<form action="/login" method="post" class="mt-md-3" id="login">
<input hidden name="username" value="{{v.username}}">
<input hidden name="redirect" value="{{redirect}}">
<input hidden name="time" value="{{time}}">
@ -20,6 +20,6 @@
<input autocomplete="off" class="form-control" id="2fa_token" name="2fa_token" type="number" pattern="[0-9]" inputmode="numeric" placeholder="6-digit code">
<small><a href="/lost_2fa">Lost your two-factor authentication device?</a></small>
<button type="submit" class="btn btn-primary login w-100 mt-3" id="login_button">Sign in</button>
</form>
<script defer src="{{'js/login_2fa.js' | asset}}"></script>
</form>
<script defer src="{{'js/login_2fa.js' | asset}}"></script>
{% endblock %}

View File

@ -3,7 +3,7 @@
{% block authtitle %}Remove the two-factor authentication from your account.{% endblock %}
{% block authtext %}If all information is correct, you will be able to remove 2-factor authentication from your account in 24 hours.{% endblock %}
{% block content %}
<div id="login-form">
<div id="login-form">
<form action="/lost_2fa" method="post" class="mt-3">
<label for="username" class="mt-3">Username</label>
<input autocomplete="off" class="form-control" id="username" type="text" name="username" required{% if v %} value="{{v.username}}" disabled{% endif %}>
@ -13,5 +13,5 @@
<input autocomplete="off" class="form-control" id="password" type="email" name="email" required{% if v %} value="{{v.email}}" disabled{% endif %}>
<input autocomplete="off" class="btn btn-primary login w-100 mt-3" type="submit" value="Send recovery link">
</form>
</div>
</div>
{% endblock %}

View File

@ -2,7 +2,7 @@
{% block pagetitle %}{{SITE_NAME}} Password Reset{% endblock %}
{% block authtitle %}Change your password.{% endblock %}
{% block content %}
<div id="login-form">
<div id="login-form">
<form action="/reset" method="post" class="mt-3">
<input hidden name="time" value="{{time}}">
<input hidden name="user_id" value="{{v.id}}">
@ -13,5 +13,5 @@
<input autocomplete="off" class="form-control" id="confentry" type="password" minlength="8" maxlength="100" name="confirm_password" required>
<input autocomplete="off" class="btn btn-primary login w-100 mt-3" type="submit" value="Change password">
</form>
</div>
</div>
{% endblock %}

View File

@ -1,7 +1,8 @@
{%- extends 'login/authforms.html' -%}
{% block pagetitle -%}
{{ref_user.username ~ " invites you to " ~ SITE_NAME if ref_user else "Sign Up"}}
{{ref_user.username ~ " invites you to " ~ SITE_NAME if ref_user else "Sign Up"}}
{%- endblock %}
{% block pagetype %}login{% endblock %}
{% block template_config %}
@ -27,7 +28,7 @@
{% endif %}
{% block content %}
<div id="register-form">
<div id="register-form">
{% if not ref_user and SITE_NAME == 'rDrama' and login_required %}
<img loading="lazy" id="logo" alt="logo" src="{{'logo.webp' | asset_siteimg}}" width=70>
<hr>
@ -114,11 +115,12 @@
* okay so it's actually whenever I feel like hitting that Login Required button. I'm really sorry, but you have to understand: WE WANT TO BE YOUR FRIEND. And we can't do that unless you join. There's really no reason not to. Like I said, 8 seconds <em>at most</em> to register. What are you worried about? Your email being sold? I don't even know what that means and you don't either. Go ahead, tell me what you'd do if someone said like, "alright bud, go sell your email address to someone." WHAT DOES THAT MEAN? And, again, you really don't even need an email. Just a username and some stupid password. That's <strong>all</strong>. Come on. Peer pressure.
</p>
{% endif %}
</div>
</div>
{% endblock %}
{% block scripts %}
<script defer src="{{'js/signup.js' | asset}}"></script>
{% if turnstile != DEFAULT_CONFIG_VALUE %}
<script defer src="{{'js/signup.js' | asset}}"></script>
{% if turnstile != DEFAULT_CONFIG_VALUE %}
<script defer src="https://challenges.cloudflare.com/turnstile/v0/api.js"></script>
{% endif %}
{% endif %}
{% endblock %}

View File

@ -7,17 +7,19 @@
{% endblock %}
{% block authtitle %}Whoops! You can't refer yourself!{% endblock %}
{% block authtext %}Send this link to a friend instead :){% endblock %}
{% block content %}
<label>Referral code</label>
{% set link = SITE_FULL ~ "/signup?ref=" ~ request.values.get('ref') %}
<input autocomplete="off" type="text" class="form-control copy-link" readonly value="{{link}}" data-clipboard-text="{{link}}">
<div class="text-center text-muted text-small mt-3 mb-5 pb-5">
<label>Referral code</label>
{% set link = SITE_FULL ~ "/signup?ref=" ~ request.values.get('ref') %}
<input autocomplete="off" type="text" class="form-control copy-link" readonly value="{{link}}" data-clipboard-text="{{link}}">
<div class="text-center text-muted text-small mt-3 mb-5 pb-5">
Already have an account? <a href="/login{{'?redirect='+redirect if redirect else ''}}" class="font-weight-bold toggle-login">Log in</a>
</div>
</div>
{% endblock %}
{% block scripts %}
<div class="toast clipboard" id="toast-success" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast-body text-center">
<div class="toast clipboard" id="toast-success" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast-body text-center">
<i class="fas fa-check-circle text-success mr-2"></i>Link copied to clipboard
</div>
</div>
{% endblock %}

View File

@ -2,7 +2,6 @@
{% block pagetype %}lottery{% endblock %}
{% block pagetitle %}Lottershe{% endblock %}
{% block content %}
<div>
<div class="lottery-page--wrapper">
<div class="lottery-page--image">
<img loading="lazy" src="{{SITE_FULL_IMAGES}}/i/{{SITE_NAME}}/lottery.webp?x=6">
@ -153,5 +152,4 @@
</div>
</div>
<script defer src="{{'js/lottery.js' | asset}}"></script>
</div>
{% endblock %}

View File

@ -3,7 +3,7 @@
{% block pagetype %}message{% endblock %}
{% block customPadding %}{% endblock %}
{% block content %}
<div class="row justify-content-center">
<div class="row justify-content-center">
<div class="col-10 col-md-5">
<div class="text-center py-6 py-md-8">
@ -17,5 +17,5 @@
<a href="/" class="btn btn-primary ">Go to homepage</a>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -2,9 +2,9 @@
{% block pagetitle %}{{title}}{% endblock %}
{% block pagetype %}message-success{% endblock %}
{% block content %}
<div class="text-center py-6 py-md-8">
<div class="text-center py-6 py-md-8">
<img class="mb-3" alt=":#marseyparty:" src="{{SITE_FULL_IMAGES}}/e/marseyparty.webp">
<div class="font-weight-bold text-muted mb-4">{{title}}</div>
<p class="text-muted">{{message}}</p>
</div>
</div>
{% endblock %}

View File

@ -1,16 +1,19 @@
{% extends "default.html" %}
{% block pagetitle %}Notification Mutes{% endblock %}
{% block content %}
<h5 class="font-weight-bolder text-center pt-2 pb-3"><span>Notification Mutes</span></h5>
<div class="overflow-x-auto mt-3"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h5 class="font-weight-bolder text-center pt-2 pb-3">
<span>Notification Mutes</span>
</h5>
<div class="overflow-x-auto mt-3">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>User</th>
<th>Target</th>
<th>Muted on</th>
</tr>
</thead>
{% for mute in mutes %}
</thead>
{% for mute in mutes %}
<tr>
<td>
{% with user = mute.user %}
@ -24,6 +27,7 @@
</td>
<td data-time="{{mute.created_utc}}"></td>
</tr>
{% endfor %}
</table>
{% endfor %}
</table>
</div>
{% endblock %}

View File

@ -3,11 +3,10 @@
{% block pagetype %}notifications{% endblock %}
{% block PseudoSubmitForm %}{% endblock %}
{% block navbar %}
<div class="font-weight-bold py-3"></div>
<div class="font-weight-bold py-3"></div>
{% endblock %}
{% block content %}
<div class="row border-bottom w-200 pr-0" style="overflow: visible">
<div class="row border-bottom w-200 pr-0" style="overflow: visible">
<div class="col p-0 w-100">
<ul class="nav settings-nav" style="padding:0 0 0 20px" id="notifications--nav-list">
<li class="nav-item">
@ -48,16 +47,15 @@
{% endif %}
</ul>
</div>
</div>
</div>
{% if request.path.startswith('/notification/') %}
{% if request.path.startswith('/notification/') %}
<div class="mt-4 mb-5 ml-3 text-lg"><a href="/notifications">View all notifications <i class="fas fa-long-arrow-right ml-1"></i></a></div>
{% else %}
{% else %}
<button type="button" class="btn btn-primary btn-rainbow ml-3 mt-4" data-nonce="{{g.nonce}}" data-onclick="postToastReload(this,'/clear')">Mark all notifications as read</button>
{% endif %}
<div class="notifs px-3 p-md-0">
{% endif %}
<div class="notifs px-3 p-md-0">
{% if request.path == '/notifications/posts' %}
{% with listing=notifications %}
<div class="mt-4 posts">
@ -67,7 +65,6 @@
{% elif request.path == '/notifications/modactions' %}
<div class="rounded border mx-auto mt-4">
{% for ma in notifications %}
<div id="action-{{ma.id}}" class="{% if ma.unread %}unread{% endif %} position-relative d-flex justify-content-between flex-wrap align-items-center h-min-16 px-3 py-3 {% if loop.index > 1 %} border-top{% endif %}">
<div class="d-flex flex-grow-1 align-items-center">
@ -128,24 +125,21 @@
<h5>No notifications</h5>
</div>
{% endif %}
</div>
</div>
{% endblock %}
{% block pagenav %}
{% if notifications %}
{% include "pagination.html" %}
{% endif %}
{% if notifications %}
{% include "pagination.html" %}
{% endif %}
<link rel="stylesheet" href="{{('css/notifications.css') | asset}}">
<link rel="stylesheet" href="{{('css/notifications.css') | asset}}">
{% if request.path == '/notifications/messages' %}
{% if request.path == '/notifications/messages' %}
<script defer src="{{'js/vendor/socketio.js' | asset}}"></script>
<script defer src="{{'js/flash.js' | asset}}"></script>
<script defer src="{{'js/messages.js' | asset}}"></script>
{% endif %}
{% endif %}
{% endblock %}
{% block GIFpicker %}{% endblock %}

View File

@ -1,7 +1,7 @@
{% extends "login.html" %}
{% block pagetitle %}Application Request for Access{% endblock %}
{% block content %}
<div id="auth-form">
<div id="auth-form">
<h2>{{application.app_name}}</h2>
<p class="mb-md-5">wants to access your @{{v.username}} account.</p>
<p class="mb-md-5">It will not be able to see your password, or change your account settings.</p>
@ -15,5 +15,5 @@
<input type="submit" class="btn btn-primary" id="auth_button" value="Authorize {{application.app_name}}">
<a href="/" class="btn btn-secondary">No, back to {{SITE_NAME}}</a>
</form>
</div>
</div>
{% endblock %}

View File

@ -1,26 +1,27 @@
{% extends "default.html" %}
{% block pagetitle %}{{kind}} Owners{% endblock %}
{% block content %}
<h5 class="my-3">{{kind}} Owners</h5>
<div class="overflow-x-auto mt-1"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h5 class="my-3">{{kind}} Owners</h5>
<div class="overflow-x-auto mt-1">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>Name</th>
<th class="disable-sort-click">Owned since</td>
</tr>
</thead>
<tbody id="owners-table">
{% for user, created_utc in users %}
</thead>
<tbody id="owners-table">
{% for user, created_utc in users %}
<tr>
<td>{% include "user_in_table.html" %}</td>
<td {% if created_utc %}data-time="{{created_utc}}"{% endif %}></td>
</tr>
{% endfor %}
</tbody>
</table>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
{% include "pagination.html" %}
{% endblock %}

View File

@ -1,20 +1,20 @@
{% extends "default.html" %}
{% block pagetitle %}Poll Votes{% endblock %}
{% block content %}
{% if option %}
{% if option %}
<h3 class="mt-5">{{option.body_html | safe}} - {{ups | length}} {% if option.exclusive == 2 %}bets{% else %}votes{% endif %}</h3>
<h3 class="mt-5">{{option.body_html | safe}} - {{ups | length}} {% if option.exclusive == 2 %}bets{% else %}votes{% endif %}</h3>
<p><b>Link:</b> <a href="{{option.parent.permalink}}">{{option.parent.permalink}}</a></p>
<p><b>Author:</b> <a href="{{option.parent.author.url}}">@{{option.parent.author_name}}</a></p>
<p><b>Author Created At:</b> <span data-time="{{option.parent.author.created_utc}}"></span></p>
<p><b>Author Truescore:</b> {{"{:,}".format(option.parent.author.truescore)}}</p>
<p><b>Total voter truescore: </b>{{total_ts}}</p>
{% if total_patrons != None %}
<p><b>Link:</b> <a href="{{option.parent.permalink}}">{{option.parent.permalink}}</a></p>
<p><b>Author:</b> <a href="{{option.parent.author.url}}">@{{option.parent.author_name}}</a></p>
<p><b>Author Created At:</b> <span data-time="{{option.parent.author.created_utc}}"></span></p>
<p><b>Author Truescore:</b> {{"{:,}".format(option.parent.author.truescore)}}</p>
<p><b>Total voter truescore: </b>{{total_ts}}</p>
{% if total_patrons != None %}
<p><b>Total {{patron}}s: </b>{{total_patrons}} | ${{total_money}}</p>
{% endif %}
{% endif %}
<div class="overflow-x-auto mt-5">
<div class="overflow-x-auto mt-5">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
@ -38,7 +38,6 @@
</tr>
{% endfor %}
</table>
</div>
{% endif %}
</div>
{% endif %}
{% endblock %}

View File

@ -1,10 +1,10 @@
{% extends "default.html" %}
{% block pagetitle %}
{%- if comment_info -%}
{%- if comment_info -%}
@{{comment_info.author_name}} comments on '{{p.plaintitle(v)}}'
{%- else -%}
{%- else -%}
{{p.plaintitle(v)}}
{%- endif -%}
{%- endif -%}
{% endblock %}
{% block pagetype %}thread{% endblock %}
@ -36,9 +36,9 @@
{% endif %}
{% set v_forbid_deleted = (p.deleted_utc != 0) and not (v and v.admin_level >= PERMS['POST_COMMENT_MODERATION']) and not (v and v.id == p.author_id) %}
{% block actionsModal %}
{% if v %}
{% block actionsModal %}
{% if v %}
<div class="modal fade d-md-none" id="actionsModal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
@ -62,17 +62,15 @@
</div>
</div>
</div>
{% endif %}
{% endif %}
{% if v and v.admin_level >= PERMS['POST_COMMENT_MODERATION'] %}
{% if v and v.admin_level >= PERMS['POST_COMMENT_MODERATION'] %}
{% include "post_admin_actions_mobile.html" %}
{% endif %}
{% endif %}
{% endblock %}
{% block content %}
<div class="row mb-3">
<div class="row mb-3">
<div id="post-root" class="col-12">
@ -241,7 +239,7 @@
</div>
</div>
</div>
</div>
</div>
<div class="row mb-3 d-md-none">
<div class="col-12">
@ -289,13 +287,13 @@
</ul>
</div>
</div>
</div>
</div>
{% if v and v.id != p.author_id and p.body and not v_forbid_deleted and v.admin_level < PERMS['POST_COMMENT_EDITING'] %}
{% if v and v.id != p.author_id and p.body and not v_forbid_deleted and v.admin_level < PERMS['POST_COMMENT_EDITING'] %}
<div autocomplete="off" class="markdown d-none border my-2 p-3 rounded" id="markdown-{{p.fullname}}" readonly>{{p.body.strip()}}</div>
{% endif %}
{% endif %}
<div class="row border-md-0 comment-section pb-3">
<div class="row border-md-0 comment-section pb-3">
<div class="col border-top">
<div class="comments-count py-3">
{%- import 'util/macros.html' as macros with context -%}
@ -304,11 +302,11 @@
{{macros.comment_reply_box(p.fullname, 'comment-reply-' + p.fullname, subwrapper_css_classes='mb-3', enable_cancel_button=false)}}
{% if comment_info %}
{% if comment_info %}
<div class="total mt-1"><a href="{{p.permalink}}">View entire discussion <i class="fas fa-long-arrow-right ml-1"></i></a></div>
{% endif %}
{% endif %}
{% if p.replies %}
{% if p.replies %}
<div class="comment-section" id="replies-of-{{p.fullname}}">
{% with comments=p.replies %}
{% include "comments.html" %}
@ -318,7 +316,7 @@
{% if offset %}
<script defer src="{{'js/view_more.js' | asset}}"></script>
{% endif %}
{% elif not p.replies and p.deleted_utc == 0 %}
{% elif not p.replies and p.deleted_utc == 0 %}
<div class="comment-section no-replies" id="replies-of-{{p.fullname}}">
{% if v %}
{% set ghost_town = 'This comment section is a ghost town...' %}
@ -327,11 +325,11 @@
{% endif %}
{{macros.ghost_box('Be the first to comment!', ghost_town, 1)}}
</div>
{% endif %}
</div>
</div>
{% endif %}
</div>
</div>
{% if v %}
{% if v %}
{% if v.id == p.author_id %}{% include "modals/delete_post.html" %}{% endif %}
{% include "modals/report_post.html" %}
{% if v.can_edit(p) %}
@ -340,22 +338,21 @@
{% if v.admin_level >= PERMS['POST_COMMENT_MODERATION'] %}
<script defer src="{{'js/admin/pinpost.js' | asset}}"></script>
{% endif %}
{% endif %}
{% endif %}
<script defer src="{{'js/vendor/clipboard.js' | asset}}"></script>
<script defer src="{{'js/vendor/clipboard.js' | asset}}"></script>
{% if not p.replies %}{% include "comments.html" %}{% endif %}
{% if not p.replies %}{% include "comments.html" %}{% endif %}
<input hidden class="twoattrs" value="{{p.id}},{{p.comment_count}}">
<script defer src="{{'js/new_comments.js' | asset}}"></script>
<script defer src="{{'js/post.js' | asset}}"></script>
<input hidden class="twoattrs" value="{{p.id}},{{p.comment_count}}">
<script defer src="{{'js/new_comments.js' | asset}}"></script>
<script defer src="{{'js/post.js' | asset}}"></script>
{% if fart and not (v and v.has_badge(128)) %}
{% if fart and not (v and v.has_badge(128)) %}
<script defer src="{{'js/fart.js' | asset}}"></script>
{% endif %}
{% endif %}
{% if v and v.admin_level >= PERMS['POST_COMMENT_MODERATION'] %}
{% if v and v.admin_level >= PERMS['POST_COMMENT_MODERATION'] %}
<script defer src="{{'js/admin/post.js' | asset}}"></script>
{% endif %}
{% endif %}
{% endblock %}

View File

@ -16,7 +16,7 @@
<button type="button" class="nobackground btn btn-link btn-block btn-lg text-left text-muted" data-bs-toggle="modal" data-bs-dismiss="modal" data-bs-target="#reportPostModal" data-nonce="{{g.nonce}}" data-onclick="report_postModal('{{p.id}}')"><i class="fas fa-flag text-center text-muted mr-2"></i>Report</button>
{% if FEATURES['AWARDS'] -%}
<button type="button" class="nobackground btn btn-link btn-block btn-lg text-left text-muted" data-bs-toggle="modal" data-bs-dismiss="modal" data-bs-target="#awardModal" data-url='/award/post/{{p.id}}' data-immune="{{p.author.immune_to_negative_awards(v)}}" data-ghost="{{p.ghost}}" data-nonce="{{g.nonce}}"><i class="fas fa-gift text-center text-muted mr-2"></i>Give Award</button>
<button type="button" class="nobackground btn btn-link btn-block btn-lg text-left text-muted" data-bs-toggle="modal" data-bs-dismiss="modal" data-bs-target="#awardModal" data-url='/award/post/{{p.id}}' data-immune="{{p.author.immune_to_negative_awards(v)}}" data-ghost="{{p.ghost}}" data-nonce="{{g.nonce}}"><i class="fas fa-gift text-center text-muted mr-2"></i>Give Award</button>
{%- endif %}
<button type="button" id="subscribe2-{{p.id}}" class="{% if p.id in v.subscribed_idlist %}d-none{% endif %} nobackground btn btn-link btn-block btn-lg text-left text-muted" data-areyousure="postToastSwitch(this,'/subscribe/{{p.id}}','subscribe2-{{p.id}}','unsubscribe2-{{p.id}}','d-none')" data-nonce="{{g.nonce}}" data-onclick="areyousure(this)" data-dismiss="modal"><i class="fas fa-bell text-center text-muted mr-2"></i>Subscribe {% if p.num_subscribers %}<span data-bs-toggle="tooltip" data-bs-placement="bottom" title="Number of subscribers">[{{p.num_subscribers}}]</span>{% endif %}</button>

View File

@ -1,25 +1,21 @@
{% extends "post.html" %}
{% set score=p.score %}
{% if v %}
{% set voted=p.voted %}
{% set adjust=voted %}
{% set voted=p.voted %}
{% set adjust=voted %}
{% else %}
{% set voted=-2 %}
{% set adjust=0 %}
{% set voted=-2 %}
{% set adjust=0 %}
{% endif %}
{% block title %}
<title>{{p.plaintitle(v)}}</title>
{% if p.is_banned %}
{% else %}
{% endif %}
<title>{{p.plaintitle(v)}}</title>
{% endblock %}
{% block content %}
<div class="mb-2 p-3">
<div class="mb-2 p-3">
<div class="col-12">
<div id="post-{{p.id}}" class="banned {% if p.award_count('glowie', v) %}glow{% endif %} card d-flex flex-row-reverse flex-nowrap justify-content-end border-0 p-0 {% if voted==1 %} upvoted{% elif voted==-1 %} downvoted{% endif %}">
<div class="card-block my-md-auto">
@ -43,9 +39,9 @@
</div>
{% endif %}
</div>
</div>
</div>
<div class="row mb-2 p-3">
<div class="row mb-2 p-3">
<div class="col-12">
<div class="post-actions d-mob-none">
<ul class="list-inline text-left mb-2">
@ -55,23 +51,22 @@
</ul>
</div>
</div>
</div>
</div>
<div class="comments-count py-3">
<div class="comments-count py-3">
{%- import 'util/macros.html' as macros with context -%}
{{- macros.sorting_buttons(COMMENT_SORTS, True) -}}
</div>
</div>
<div class="comment-section">
<div class="comment-section">
{% with comments=p.replies %}
{% include "comments.html" %}
{% endwith %}
</div>
</div>
{% if offset %}
{% if offset %}
<script defer src="{{'js/view_more.js' | asset}}"></script>
{% endif %}
{% endif %}
{% endblock %}
{% block mobileactions %}

View File

@ -13,25 +13,23 @@
{% set disable_votes = request.path.startswith('/@') and v and v.admin_level < PERMS['ENABLE_VOTE_BUTTONS_ON_USER_PAGE'] %}
{% for p in listing if can_see(v, p) %}
<input hidden class="twoattrs" value="{{p.id}},{{p.comment_count}}">
<input hidden class="twoattrs" value="{{p.id}},{{p.comment_count}}">
{% set ups=p.upvotes %}
{% set downs=p.downvotes %}
{% set score=ups-downs %}
{% set ups=p.upvotes %}
{% set downs=p.downvotes %}
{% set score=ups-downs %}
{% if v %}
{% if v %}
{% set voted= p.voted %}
{% else %}
{% else %}
{% set voted=-2 %}
{% endif %}
{% endif %}
{% set v_forbid_deleted = (p.deleted_utc != 0 or p.is_banned) and not (v and v.admin_level >= PERMS['POST_COMMENT_MODERATION']) and not (v and v.id == p.author_id) %}
{% set v_forbid_deleted = (p.deleted_utc != 0 or p.is_banned) and not (v and v.admin_level >= PERMS['POST_COMMENT_MODERATION']) and not (v and v.id == p.author_id) %}
{{macros.reports(p, 'post')}}
<div id="post-{{p.id}}" class="actual-post card {% if p.ghost %}ghost-post{% endif %} {% if p.unread %}unread{% endif %} {% if p.is_banned %} banned{% endif %}{% if p.deleted_utc %} deleted{% endif %}{% if p.stickied %} stickied{% endif %}{% if voted==1 %} upvoted{% elif voted==-1 %} downvoted{% endif %}{% if p.nsfw %} nsfw{% endif %}">
{{macros.reports(p, 'post')}}
<div id="post-{{p.id}}" class="actual-post card {% if p.ghost %}ghost-post{% endif %} {% if p.unread %}unread{% endif %} {% if p.is_banned %} banned{% endif %}{% if p.deleted_utc %} deleted{% endif %}{% if p.stickied %} stickied{% endif %}{% if voted==1 %} upvoted{% elif voted==-1 %} downvoted{% endif %}{% if p.nsfw %} nsfw{% endif %}">
<div class="d-flex flex-row-reverse flex-md-row flex-nowrap" style="align-items:flex-start">
<div class="voting my-2 d-none d-md-flex pr-2">
{% if v %}
@ -93,9 +91,9 @@
{{p.realtitle(v) | safe}}
</a></h5>
</div>
</div>
</div>
<div class="post-actions d-mob-none">
<div class="post-actions d-mob-none">
<div class="d-flex" style="flex-basis:146px"></div>
<ul class="list-inline text-right d-flex">
{% if p.realbody(v) %}
@ -107,9 +105,9 @@
</a>
{% include 'post_actions.html' %}
</ul>
</div>
</div>
<div class="d-md-none mt-2">
<div class="d-md-none mt-2">
<div class="post-actions">
<ul class="list-inline text-right d-flex">
<li class="list-inline-item mr-auto">
@ -160,9 +158,9 @@
{% endif %}
</ul>
</div>
</div>
</div>
{% if v %}
{% if v %}
<div class="modal fade d-md-none" id="actionsModal-{{p.id}}" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
@ -180,14 +178,13 @@
</div>
</div>
</div>
{% endif %}
{% endif %}
{% if v and v.admin_level >= PERMS['POST_COMMENT_MODERATION'] %}
{% if v and v.admin_level >= PERMS['POST_COMMENT_MODERATION'] %}
{% include "post_admin_actions_mobile.html" %}
{% endif %}
{% endif %}
{% if not v_forbid_deleted %}
{% if not v_forbid_deleted %}
{% if p.realbody(v) %}
<div class="{% if p.chudded %}text-uppercase chud-img chud-{{p.id_last_num}}{% endif %} d-none card rounded border post-preview" id="post-text-{{p.id}}">
{{p.realbody(v) | safe}}
@ -209,8 +206,8 @@
{{p.embed | safe}}
</div>
{% endif %}
{% endif %}
</div>
{% endif %}
</div>
{% else %}
<div class="row no-gutters">
<div class="col">

View File

@ -2,7 +2,7 @@
{% block pagetype %}search{% endblock %}
{% block pagetitle %}Search for "{{query}}"{% endblock %}
{% block head_final %}
<meta name="description" content="{{total}} result{{'s' if total != 1 else ''}}">
<meta name="description" content="{{total}} result{{'s' if total != 1 else ''}}">
{% endblock %}
{% block PseudoSubmitForm %}
@ -18,7 +18,7 @@
{% endblock %}
{% block navbar %}{% endblock %}
{% block content %}
<div class="row no-gutters my-md-3">
<div class="row no-gutters my-md-3">
<div class="col">
<div class="card search-results">
@ -114,8 +114,8 @@
</div>
</div>
</div>
</div>
<div class="row no-gutters">
</div>
<div class="row no-gutters">
<div class="col">
<div class="flex-row box-shadow-bottom d-flex justify-content-center justify-content-md-between align-items-center">
<ul class="nav settings-nav">
@ -134,8 +134,8 @@
</ul>
</div>
</div>
</div>
<div class="row no-gutters">
</div>
<div class="row no-gutters">
<div class="col-12">
<div class="posts">
{% block listing_template %}
@ -143,8 +143,8 @@
{% endblock %}
</div>
</div>
</div>
</div>
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
{% include "pagination.html" %}
{% endblock %}

View File

@ -17,5 +17,5 @@
{% endblock %}
{% block listinglength %}
{{comments | length}}
{{comments | length}}
{% endblock %}

View File

@ -1,7 +1,7 @@
{% extends "search.html" %}
{% block listing_template %}
<div class="row row-cols-1 row-cols-md-3 mt-3">
{% include "user_listing.html" %}
</div>
<div class="row row-cols-1 row-cols-md-3 mt-3">
{% include "user_listing.html" %}
</div>
{% endblock %}
{% block listinglength %}{{users | length}}{% endblock %}

View File

@ -43,12 +43,11 @@
</div>
</div>
{% block clipboard %}
<div class="toast clipboard" id="toast-success" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast clipboard" id="toast-success" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast-body text-center">
<i class="fas fa-check-circle text-success mr-2"></i>Link copied to clipboard
</div>
</div>
</div>
{% endblock %}
{% block onload %}{% endblock %}
<script defer src="{{'js/vendor/clipboard.js' | asset}}"></script>
{% endblock %}

View File

@ -1,7 +1,7 @@
{% extends "settings.html" %}
{% block pagetitle %}Advanced Settings{% endblock %}
{% block content %}
<div class="row settings-page" id="settings-page-advanced">
<div class="row settings-page" id="settings-page-advanced">
<div class="col col-lg-8">
<div class="settings">
{# toggle_section(title, id, name, flag, below_text) #}
@ -155,5 +155,5 @@
</section>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -1,15 +1,15 @@
{% extends "settings.html" %}
{% block pagetitle %}Apps/Bots{% endblock %}
{% block content %}
<div class="row">
<div class="row">
<div class="col col-lg-8">
<div class="settings">
<h5>API Guide</h5>
<a style="font-size:18px" href="/api">{{SITE_FULL}}/api</a>
<h5>API Guide</h5>
<a style="font-size:18px" href="/api">{{SITE_FULL}}/api</a>
<h5 class="mt-6">Your API Applications</h5>
{% for app in v.applications if app.client_id %}
<form id="edit-app-{{app.id}}" action="/edit_app/{{app.id}}" method="post" data-nonce="{{g.nonce}}" data-onsubmit="sendFormXHR(this)">
<h5 class="mt-6">Your API Applications</h5>
{% for app in v.applications if app.client_id %}
<form id="edit-app-{{app.id}}" action="/edit_app/{{app.id}}" method="post" data-nonce="{{g.nonce}}" data-onsubmit="sendFormXHR(this)">
<div class="settings-section rounded">
<div class="d-lg-flex">
<div class="title w-lg-25">
@ -38,14 +38,14 @@
</div>
</div>
</div>
</form>
{% else %}
<p>None</p>
{% endfor %}
</form>
{% else %}
<p>None</p>
{% endfor %}
<h5 class="mt-6">API Applications Awaiting Approval</h5>
{% for app in v.applications if not app.client_id %}
<form id="edit-app-{{app.id}}" action="/edit_app/{{app.id}}" method="post" data-nonce="{{g.nonce}}" data-onsubmit="sendFormXHR(this)">
<h5 class="mt-6">API Applications Awaiting Approval</h5>
{% for app in v.applications if not app.client_id %}
<form id="edit-app-{{app.id}}" action="/edit_app/{{app.id}}" method="post" data-nonce="{{g.nonce}}" data-onsubmit="sendFormXHR(this)">
<div class="settings-section rounded">
<div class="d-lg-flex">
<div class="title w-lg-25">
@ -73,13 +73,13 @@
</div>
</div>
</div>
</form>
{% else %}
<p>None</p>
{% endfor %}
</form>
{% else %}
<p>None</p>
{% endfor %}
<h5 class="mt-6">Your Authorized Applications</h5>
{% for auth in v.authorizations %}
<h5 class="mt-6">Your Authorized Applications</h5>
{% for auth in v.authorizations %}
<div id="auth-{{auth.id}}" class="settings-section rounded">
<div class="d-lg-flex">
<div class="title w-lg-25">
@ -97,13 +97,13 @@
</div>
</div>
</div>
{% else %}
<p>None</p>
{% endfor %}
{% else %}
<p>None</p>
{% endfor %}
<h5 class="mt-6">Request API Keys</h2>
<h5 class="mt-6">Request API Keys</h2>
<form id="api-key-request-form" action="/api_keys" method="post" data-nonce="{{g.nonce}}" data-onsubmit="sendFormXHRReload(this)">
<form id="api-key-request-form" action="/api_keys" method="post" data-nonce="{{g.nonce}}" data-onsubmit="sendFormXHRReload(this)">
<div class="settings-section rounded">
<div class="d-lg-flex">
<div class="body w-lg-100">
@ -124,15 +124,16 @@
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
{% endblock %}
{% block clipboard %}
<div class="toast clipboard" id="toast-success" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast clipboard" id="toast-success" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast-body text-center">
<i class="fas fa-check-circle text-success mr-2"></i>Token copied to clipboard
</div>
</div>
</div>
{% endblock %}

View File

@ -1,7 +1,7 @@
{%- import 'util/macros.html' as macros with context -%}
{% macro toggle_section(title, id, name, flag, below_text, disabled) %}
<div id="{{id}}_toggle" class="d-lg-flex border-bottom">
<div id="{{id}}_toggle" class="d-lg-flex border-bottom">
<div class="title w-lg-25">
<label for="{{id}}">{{title}}</label>
</div>
@ -14,11 +14,11 @@
<span class="text-small text-muted">{{below_text|safe}}</span>
{% endif %}
</div>
</div>
</div>
{% endmacro %}
{% macro color_section(id, form_action, form_name, section_title, current_color) %}
<div class="d-lg-flex border-bottom">
<div class="d-lg-flex border-bottom">
<div class="title w-lg-25">
<label for="{{id}}">{{section_title}}</label>
</div>
@ -49,7 +49,7 @@
</form>
</div>
</div>
</div>
</div>
{% endmacro %}
{% macro line_text_section(id, form_action, form_name, section_title, contents, below_text, placeholder_text, button_text, show_emojis, minlength, maxlength, pattern, disabled) %}
@ -72,7 +72,7 @@
{% endmacro %}
{% macro text_area_section(id, form_action, form_name, section_title, contents, below_text, placeholder_text, show_extras, maxlength) %}
<div class="body d-lg-flex border-bottom">
<div class="body d-lg-flex border-bottom">
<label class="text-black w-lg-25">{{section_title}}</label>
<div class="w-lg-100">
<form id="{{id}}-form" action="{{form_action}}" method="post" enctype="multipart/form-data" data-nonce="{{g.nonce}}" data-onsubmit="sendFormXHR(this)">
@ -93,5 +93,5 @@
</div>
</form>
</div>
</div>
</div>
{% endmacro %}

View File

@ -1,7 +1,7 @@
{% extends "settings.html" %}
{% block pagetitle %}Custom CSS{% endblock %}
{% block content %}
<div class="row">
<div class="row">
<div class="settings col col-md-8">
<section>
<h5>Custom CSS</h5>
@ -40,6 +40,5 @@
</div>
</section>
</div>
</div>
</div>
{% endblock %}

View File

@ -1,7 +1,7 @@
{% extends "settings.html" %}
{% block pagetitle %}Personal Settings{% endblock %}
{% block content %}
<div class="row settings-page" id="settings-page-personal">
<div class="row settings-page" id="settings-page-personal">
<div class="col col-lg-10">
<div class="settings">
<section id="site-settings-experience-section" class="settings-section-section">
@ -326,25 +326,25 @@
</section>
</div>
</div>
</div>
{% include "modals/emoji.html" %}
{% include "modals/gif.html" %}
</div>
{% include "modals/emoji.html" %}
{% include "modals/gif.html" %}
{% if v.flairchanged %}
{% if v.flairchanged %}
<input hidden id="flairchanged" value="{{v.flairchanged}}">
<script defer src="{{'js/flairchanged.js' | asset}}"></script>
{% endif %}
{% endif %}
{% if v.namechanged %}
{% if v.namechanged %}
<input hidden id="namechanged" value="{{v.namechanged}}">
<script defer src="{{'js/namechanged.js' | asset}}"></script>
{% endif %}
{% endif %}
<script defer src="{{'js/settings_profile.js' | asset}}"></script>
<script defer src="{{'js/settings_profile.js' | asset}}"></script>
{% macro permanent_filter_modal(id, form_action, field, friendly_name, badge_name) %}
{% if FEATURES['USERS_PERMANENT_WORD_FILTERS'] -%}
<div class="modal fade" id="modal-{{id}}" tabindex="-1">
{% macro permanent_filter_modal(id, form_action, field, friendly_name, badge_name) %}
{% if FEATURES['USERS_PERMANENT_WORD_FILTERS'] -%}
<div class="modal fade" id="modal-{{id}}" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<form class="m-auto" action="{{form_action}}" id="{{id}}-form" method="post" data-nonce="{{g.nonce}}" data-onsubmit="sendFormXHRReload(this)">
<div class="modal-content">
@ -368,9 +368,10 @@
</div>
</form>
</div>
</div>
{%- endif %}
{% endmacro %}
{{permanent_filter_modal('slurreplacer', '/settings/personal', 'slurreplacer', 'Slur Replacer', 'Social Justice Berserker')}}
{{permanent_filter_modal('profanityreplacer', '/settings/personal', 'profanityreplacer', 'Profanity Replacer', 'Soapy-Mouthed Angel')}}
</div>
{%- endif %}
{% endmacro %}
{{permanent_filter_modal('slurreplacer', '/settings/personal', 'slurreplacer', 'Slur Replacer', 'Social Justice Berserker')}}
{{permanent_filter_modal('profanityreplacer', '/settings/personal', 'profanityreplacer', 'Profanity Replacer', 'Soapy-Mouthed Angel')}}
{% endblock %}

View File

@ -1,9 +1,9 @@
{% extends "settings.html" %}
{% block pagetitle %}Security Settings{% endblock %}
{% block content %}
<script defer src="{{'js/settings_security.js' | asset}}"></script>
<div class="row settings-page" id="settings-page-security">
<div class="col col-lg-8">
<script defer src="{{'js/settings_security.js' | asset}}"></script>
<div class="row settings-page" id="settings-page-security">
<div class="col col-lg-8">
<div class="settings">
<section id="site-settings-email-section" class="settings-section-section">
<h5>Email</h5>
@ -122,10 +122,10 @@
</form>
</section>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="2faModal" tabindex="-1">
<div class="modal fade" id="2faModal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
@ -180,11 +180,11 @@
</form>
</div>
</div>
</div>
</div>
<div class="toast error" id="toast-exile-error" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast error" id="toast-exile-error" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast-body text-center">
<i class="fas fa-exclamation-circle text-danger mr-2"></i><span id="toast-error-message">Error. Please try again.</span>
</div>
</div>
</div>
{% endblock %}

View File

@ -3,8 +3,8 @@
{% block pagetype %}settings2{% endblock %}
{% block body_attributes %}class="has_header"{% endblock %}
{% block body %}
{% include "header.html" %}
{% block subNav %}
{% include "header.html" %}
{% block subNav %}
{% if not request.path.startswith('/h/') %}
<div class="container-fluid bg-white sticky d-mob-none" style="padding-top: 50px; padding-bottom: 0 !important">
<div class="row box-shadow-bottom">
@ -69,26 +69,23 @@
</div>
</div>
{% endif %}
{% endblock %}
<div class="pt-3 container">
{% block content %}{% endblock %}
{% endblock %}
<div class="pt-3 container">
{% block content %}{% endblock %}
</div>
<div class="toast clipboard" id="toast-clipboard-success" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast-body text-center">
<i class="fas fa-check-circle text-success mr-2"></i>Link copied to clipboard
</div>
</div>
</div>
<div class="toast clipboard" id="toast-clipboard-error" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast clipboard" id="toast-clipboard-error" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast-body text-center">
<i class="fas fa-exclamation-circle mr-2"></i>Unable to copy link
</div>
</div>
{% block mobilenavbar %}{% include "mobile_navigation_bar.html" %}{% endblock %}
{% block scripts %}{% endblock %}
</div>
{% block mobilenavbar %}{% include "mobile_navigation_bar.html" %}{% endblock %}
{% block scripts %}{% endblock %}
{% endblock %}

View File

@ -1,12 +1,12 @@
{% extends "default.html" %}
{% block pagetitle %}{{SITE_NAME}} Sidebar{% endblock %}
{% block content %}
<div class="mx-4 mt-4 mb-6">
<div class="mx-4 mt-4 mb-6">
<h1 class="text-muted text-uppercase">Sidebar</h5>
<div id="sidebar" class="my-3">
{% if has_sidebar %}
{% include "sidebar_" ~ SITE_NAME ~ ".html" %}
{% endif %}
</div>
</div>
</div>
{% endblock %}

View File

@ -1,9 +1,9 @@
{%- extends 'default.html' -%}
{% block pagetitle %}Women World Cup 2023 Betting Leaderboard{% endblock %}
{% block content %}
<h1>Women World Cup 2023 Betting Leaderboard</h1>
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<h1>Women World Cup 2023 Betting Leaderboard</h1>
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>#</th>
@ -29,7 +29,6 @@
</tr>
{% endfor %}
</tbody>
</table>
</div>
</table>
</div>
{% endblock %}

View File

@ -1,14 +1,15 @@
{% extends "default.html" %}
{% block pagetitle %}Content Statistics{% endblock %}
{% block content %}
<div class="overflow-x-auto mt-1"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<div class="overflow-x-auto mt-1">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th class="disable-sort-click">Statistic</th>
<th class="disable-sort-click">Value</th>
</tr>
</thead>
{% for key, value in data.items() %}
</thead>
{% for key, value in data.items() %}
<tr>
<td>{{key}}</td>
{% if key == 'time' -%}
@ -17,6 +18,7 @@
<td>{{value}}</td>
{%- endif %}
</tr>
{% endfor %}
</table>
{% endfor %}
</table>
</div>
{% endblock %}

View File

@ -13,11 +13,11 @@
</div>
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
<div class="toast clipboard" id="toast-success" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
{% include "pagination.html" %}
<div class="toast clipboard" id="toast-success" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast-body text-center">
<i class="fas fa-check-circle text-success mr-2"></i>Link copied to clipboard
</div>
</div>
<script defer src="{{'js/vendor/clipboard.js' | asset}}"></script>
</div>
<script defer src="{{'js/vendor/clipboard.js' | asset}}"></script>
{% endblock %}

View File

@ -3,11 +3,11 @@
{% block PseudoSubmitForm %}{% endblock %}
{% block customPadding %}{% endblock %}
{% block content %}
<div class="row mt-3 p-md-4">
<div class="row mt-3 p-md-4">
{% include "user_listing.html" %}
</div>
</div>
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
{% include "pagination.html" %}
{% endblock %}
{% block navbar %}{% endblock %}

View File

@ -10,7 +10,7 @@
{% set pfp_expanded = u.highres if (u.highres and can_see(v, u)) else u.profile_url %}
{% block desktopUserBanner %}
<div class="row d-mob-none">
<div class="row d-mob-none">
<div class="col px-0">
<div id="desktopUserBanner" class="jumbotron jumbotron-fluid jumbotron-guild d-mob-none" {% if FEATURES['USERS_PROFILE_BANNER'] %}data-style="background-image: url({{u.banner_url}})"{% endif %}>
<div class="jumbotron-overlay"></div>
@ -168,7 +168,6 @@
{% endif %}
<div class="d-flex justify-content-between align-items-center">
<div>
{% if v and v.id != u.id %}
<div id="profile--actionbtns">
<div class="actionbtns mb-3">
@ -289,7 +288,6 @@
{% endif %}
</div>
</div>
</div>
{% if FEATURES['BADGES'] -%}
<div id="profile--badges">
@ -307,14 +305,14 @@
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block mobileUserBanner %}
<div class="container-fluid pb-0 text-center bg-white d-md-none" style="border-radius:0!important">
<div class="container-fluid pb-0 text-center bg-white d-md-none" style="border-radius:0!important">
<div class="row">
<div class="col px-0">
<a rel="nofollow noopener" href="{{u.banner_url}}">
@ -599,5 +597,5 @@
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -3,7 +3,7 @@
{% block pagetype %}userpage{% endblock %}
{% block pagetitle %}@{{u.username}}{% endblock %}
{% block content %}
<div class="row no-gutters">
<div class="row no-gutters">
<div class="col-12">
<div class="text-center py-6 py-md-8">
<span class="fa-stack fa-2x text-muted mb-2">
@ -15,6 +15,6 @@
<button type="button" class="btn btn-success text-success mt-2" data-nonce="{{g.nonce}}" data-onclick="postToastReload(this,'/unblock_user?username={{u.username}}')"><i class="fas fa-eye text-success mr-2"></i>Unblock @{{u.username}}</a>
</div>
</div>
</div>
</div>
{% endblock %}
{% block pagenav %}{% endblock %}

View File

@ -1,28 +1,29 @@
{% extends "default.html" %}
{% block pagetitle %}@{{u.username}}'s blockers{% endblock %}
{% block content %}
<h5 class="my-3">@{{u.username}}'s blockers ({{total}} user{{macros.plural(total)}})</h5>
<div class="overflow-x-auto mt-1"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h5 class="my-3">@{{u.username}}'s blockers ({{total}} user{{macros.plural(total)}})</h5>
<div class="overflow-x-auto mt-1">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>Name</th>
<th class="disable-sort-click">Blocking since</td>
</tr>
</thead>
<tbody id="blockers-table">
{% for block, user in users %}
</thead>
<tbody id="blockers-table">
{% for block, user in users %}
<tr>
<td>{% include "user_in_table.html" %}</td>
<td {% if block.created_utc > 1599343262 %}data-time="{{block.created_utc}}"{% endif %}></td>
</tr>
{% endfor %}
</tbody>
</table>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
{% include "pagination.html" %}
{% endblock %}
({{total}} user{{macros.plural(total)}})

View File

@ -1,9 +1,9 @@
{% extends "default.html" %}
{% block pagetitle %}Users blocked by @{{u.username}}{% endblock %}
{% block content %}
<h5 class="my-3">Users blocked by @{{u.username}} ({{total}} user{{macros.plural(total)}})</h5>
<div class="overflow-x-auto mt-1"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h5 class="my-3">Users blocked by @{{u.username}} ({{total}} user{{macros.plural(total)}})</h5>
<div class="overflow-x-auto mt-1"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>Name</th>
<th class="disable-sort-click">Blocking since</th>
@ -11,9 +11,9 @@
<th class="disable-sort-click"></th>
{% endif %}
</tr>
</thead>
<tbody id="blockers-table">
{% for block, user in users %}
</thead>
<tbody id="blockers-table">
{% for block, user in users %}
<tr>
<td>{% include "user_in_table.html" %}</td>
<td {% if block.created_utc > 1599343262 %}data-time="{{block.created_utc}}"{% endif %}></td>
@ -23,16 +23,15 @@
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
{% endfor %}
</tbody>
</table>
{% if v.id == u.id %}
{% if v.id == u.id %}
<script defer src="{{'js/userpage_blocking.js' | asset}}"></script>
{% endif %}
{% endif %}
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
{% include "pagination.html" %}
{% endblock %}

View File

@ -1,9 +1,10 @@
{% extends "default.html" %}
{% block pagetitle %}@{{u.username}}'s followers{% endblock %}
{% block content %}
<h5 class="my-3">@{{u.username}}'s followers ({{total}} user{{macros.plural(total)}})</h5>
<div class="overflow-x-auto mt-1"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h5 class="my-3">@{{u.username}}'s followers ({{total}} user{{macros.plural(total)}})</h5>
<div class="overflow-x-auto mt-1">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>Name</th>
<th class="disable-sort-click">Following since</td>
@ -11,9 +12,9 @@
<th class="disable-sort-click"></th>
{% endif %}
</tr>
</thead>
<tbody id="followers-table">
{% for follow, user in users %}
</thead>
<tbody id="followers-table">
{% for follow, user in users %}
<tr>
<td>{% include "user_in_table.html" %}</td>
<td {% if follow.created_utc > 1599343262 %}data-time="{{follow.created_utc}}"{% endif %}></td>
@ -25,14 +26,14 @@
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
<script defer src="{{'js/followers.js' | asset}}"></script>
{% endfor %}
</tbody>
</table>
</div>
<script defer src="{{'js/followers.js' | asset}}"></script>
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
{% include "pagination.html" %}
{% endblock %}

View File

@ -1,9 +1,10 @@
{% extends "default.html" %}
{% block pagetitle %}Users followed by @{{u.username}}{% endblock %}
{% block content %}
<h5 class="my-3">Users followed by @{{u.username}} ({{total}} user{{macros.plural(total)}})</h5>
<div class="overflow-x-auto"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h5 class="my-3">Users followed by @{{u.username}} ({{total}} user{{macros.plural(total)}})</h5>
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>Name</th>
<th class="disable-sort-click">Following since</td>
@ -11,9 +12,9 @@
<th class="disable-sort-click"></th>
{% endif %}
</tr>
</thead>
<tbody id="followers-table">
{% for follow, user in users %}
</thead>
<tbody id="followers-table">
{% for follow, user in users %}
<tr>
<td>{% include "user_in_table.html" %}</td>
<td {% if follow.created_utc > 1599343262 %}data-time="{{follow.created_utc}}"{% endif %}></td>
@ -25,14 +26,14 @@
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
<script defer src="{{'js/following.js' | asset}}"></script>
{% endfor %}
</tbody>
</table>
</div>
<script defer src="{{'js/following.js' | asset}}"></script>
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
{% include "pagination.html" %}
{% endblock %}

View File

@ -1,26 +1,27 @@
{% extends "default.html" %}
{% block pagetitle %}@{{u.username}}'s notification muters{% endblock %}
{% block content %}
<h5 class="my-3">@{{u.username}}'s notification muters ({{total}} user{{macros.plural(total)}})</h5>
<div class="overflow-x-auto mt-1"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h5 class="my-3">@{{u.username}}'s notification muters ({{total}} user{{macros.plural(total)}})</h5>
<div class="overflow-x-auto mt-1">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>Name</th>
<th class="disable-sort-click">Muting notifications since</td>
</tr>
</thead>
<tbody id="muters-table">
{% for mute, user in users %}
</thead>
<tbody id="muters-table">
{% for mute, user in users %}
<tr>
<td>{% include "user_in_table.html" %}</td>
<td data-time="{{mute.created_utc}}"></td>
</tr>
{% endfor %}
</tbody>
</table>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
{% include "pagination.html" %}
{% endblock %}

View File

@ -1,9 +1,10 @@
{% extends "default.html" %}
{% block pagetitle %}Users whose notifications are muted by @{{u.username}}{% endblock %}
{% block content %}
<h5 class="my-3">Users whose notifications are muted by @{{u.username}} ({{total}} user{{macros.plural(total)}})</h5>
<div class="overflow-x-auto mt-1"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h5 class="my-3">Users whose notifications are muted by @{{u.username}} ({{total}} user{{macros.plural(total)}})</h5>
<div class="overflow-x-auto mt-1">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>Name</th>
<th class="disable-sort-click">Muting notifications since</th>
@ -11,9 +12,9 @@
<th class="disable-sort-click"></th>
{% endif %}
</tr>
</thead>
<tbody id="muters-table">
{% for mute, user in users %}
</thead>
<tbody id="muters-table">
{% for mute, user in users %}
<tr>
<td>{% include "user_in_table.html" %}</td>
<td data-time="{{mute.created_utc}}"></td>
@ -23,16 +24,16 @@
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
{% endfor %}
</tbody>
</table>
</div>
{% if v.id == u.id %}
{% if v.id == u.id %}
<script defer src="{{'js/userpage_muting.js' | asset}}"></script>
{% endif %}
{% endif %}
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
{% include "pagination.html" %}
{% endblock %}

View File

@ -1,10 +1,10 @@
{%- extends 'userpage/userpage.html' -%}
{% block userpage_content %}
<div class="row no-gutters {% if listing %}mt-md-3{% elif not listing %}my-md-3{% endif %} userpage-posts" style="margin-top: 10px">
<div class="row no-gutters {% if listing %}mt-md-3{% elif not listing %}my-md-3{% endif %} userpage-posts" style="margin-top: 10px">
<div class="col">
<div class="posts">
{% include "post_listing.html" %}
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -1,6 +1,6 @@
{% extends "userpage/userpage.html" %}
{% block userpage_content %}
<div class="row justify-content-center userpage-private">
<div class="row justify-content-center userpage-private">
<div class="col-10 col-md-5">
<div class="text-center px-3 my-3">
<span class="fa-stack fa-2x text-muted mb-4">
@ -11,5 +11,5 @@
<p class="text-muted">This user has enabled private mode to cloak their posting history.</p>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -1,6 +1,7 @@
{% extends "default.html" %}
{% block pagetype %}userpage{% endblock %}
{% block pagetitle %}@{{u.username}}'s profile{% endblock %}
{% block head_final %}
{% if u and u.profile_background %}
<link rel="stylesheet" href="{{('css/transparent.css') | asset}}">
@ -9,42 +10,47 @@
<link rel="stylesheet" href="/@{{u.username}}/profilecss">
{% endif %}
{% endblock %}
{% block content %}
{%- include 'userpage/banner.html' -%}
{%- include 'userpage/header.html' -%}
{% block userpage_content required %}{% endblock %}
{% if FEATURES['USERS_PROFILE_SONG'] and u.song %}
{%- include 'userpage/banner.html' -%}
{%- include 'userpage/header.html' -%}
{% block userpage_content required %}{% endblock %}
{% 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 %}
<div id="u_username" class="d-none">{{u.username}}</div>
{% endif %}
{% endif %}
{% endif %}
{% if v %}
<div id='tax' class="d-none">{% if v.patron or u.patron %}0{% else %}0.03{% endif %}</div>
<script defer src="{{'js/userpage_v.js' | asset}}"></script>
<div id="username" class="d-none">{{u.username}}</div>
{% endif %}
<script defer src="{{'js/userpage.js' | asset}}"></script>
{% if can_see(v, u) and u.song %}
{% if v %}
<div id='tax' class="d-none">{% if v.patron or u.patron %}0{% else %}0.03{% endif %}</div>
<script defer src="{{'js/userpage_v.js' | asset}}"></script>
<div id="username" class="d-none">{{u.username}}</div>
{% endif %}
<script defer src="{{'js/userpage.js' | asset}}"></script>
{% if can_see(v, u) and u.song %}
<audio id="profile-song" hidden preload="none" src="/songs/{{u.song}}.mp3" loop></audio>
<script defer src="{{'js/profile_song.js' | asset}}"></script>
{% endif %}
{% endif %}
{% endblock %}
{% block pagenav %}
{% if listing %}
{% include "pagination.html" %}
{% endif %}
{% if listing %}
{% include "pagination.html" %}
{% endif %}
{% if request.path.endswith('/posts') %}
{% if request.path.endswith('/posts') %}
<script defer src="{{'js/vendor/marked.js' | asset}}"></script>
<script defer src="{{'js/markdown.js' | asset}}"></script>
{% endif %}
{% endif %}
{% if v and v.id != u.id and request.path.endswith('/posts') %}
{% if v and v.id != u.id and request.path.endswith('/posts') %}
{% include "modals/gif.html" %}
{% endif %}
{% endif %}
{% endblock %}
{% block GIFpicker %}{% endblock %}

View File

@ -1,15 +1,17 @@
{% extends "default.html" %}
{% block pagetitle %}@{{u.username}}'s Profile Views{% endblock %}
{% block content %}
<h5 class="pt-4 pl-2 pb-3">Users who viewed @{{u.username}}'s profile</h5>
<div class="overflow-x-auto"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h5 class="pt-4 pl-2 pb-3">Users who viewed @{{u.username}}'s profile</h5>
<div class="overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>Name</th>
<th class="disable-sort-click">Last visit</th>
</tr>
</thead>
{% for view in views %}
</thead>
{% for view in views %}
<tr>
<td>
{% with user=view.viewer %}
@ -18,11 +20,11 @@
</td>
<td>{{view.last_view_string}}</td>
</tr>
{% endfor %}
</table>
{% endfor %}
</table>
</div>
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
{% include "pagination.html" %}
{% endblock %}

View File

@ -5,7 +5,7 @@
{% block mobileUserBanner %}{% endblock %}
{% block pagetitle %}Posts{% endblock %}
{% block content %}
<ul class="nav post-nav py-2">
<ul class="nav post-nav py-2">
<li class="nav-item">
<a class="nav-link {% if request.path.endswith('/posts') %}active" href="{{request.path}}"{% else %}" href="{{request.path.replace('/comments','/posts')}}"{% endif %}>
Posts
@ -16,8 +16,8 @@
Comments
</a>
</li>
</ul>
<div class="row no-gutters">
</ul>
<div class="row no-gutters">
<div class="col">
{% block listing %}
<div class="posts">
@ -25,9 +25,9 @@
</div>
{% endblock %}
</div>
</div>
</div>
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
{% include "pagination.html" %}
{% endblock %}

View File

@ -1,25 +1,26 @@
{% extends "default.html" %}
{% block pagetitle %}{{name2}}{% endblock %}
{% block content %}
<h3 class="my-3" style="text-align: center">{{name2}}</h3>
<h5 class="font-weight-bold text-center mt-3">Total: {{total_items}}</h5>
<div class="mt-1 overflow-x-auto"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<h3 class="my-3" style="text-align: center">{{name2}}</h3>
<h5 class="font-weight-bold text-center mt-3">Total: {{total_items}}</h5>
<div class="mt-1 overflow-x-auto">
<table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th>#</th>
<th>Name</th>
<th>{{name}}votes</th>
</tr>
</thead>
<tbody id="followers-table">
{% for user, num in users %}
</thead>
<tbody id="followers-table">
{% for user, num in users %}
<tr {% if v.id == user.id %}class="self"{% endif %}>
<td>{{loop.index+PAGE_SIZE*(page-1)}}</td>
<td>{% include "user_in_table.html" %}</td>
<td><a href="{{request.path}}/@{{user.username}}/posts">{{num}}</a></td>
</tr>
{% endfor %}
{% if pos and (pos[0] > 25 or not pos[1]) %}
{% endfor %}
{% if pos and (pos[0] > 25 or not pos[1]) %}
<tr style="border-top:2px solid var(--primary)">
<td>{{pos[0]}}</td>
<td>
@ -29,12 +30,12 @@
</td>
<td><a href="{{request.path}}/@{{v.username}}/posts">{{pos[1]}}</a></td>
</tr>
{% endif %}
</tbody>
</table>
{% endif %}
</tbody>
</table>
</div>
{% endblock %}
{% block pagenav %}
{% include "pagination.html" %}
{% include "pagination.html" %}
{% endblock %}

Some files were not shown because too many files have changed in this diff Show More