[DO NOT MERGE] titlesssssssssss (#468)

* titles

* testing

* self

* Revert "self"

This reverts commit d6c12d5a5ba125feb44673f55e1fdac75f151cb5.

* Revert "testing"

This reverts commit 86d800f9fd552196b31f0e0b3891d4fc072a9bc0.

* testing on devrama

* rewrite the html head

* reference error or smth idk

* tempalte debug

* template debug redux

* default2

* rename default2 -> root, page title

* fix settings2

* include the set_variables block

* root scope variables 2

* test 3

* remove unnecessary set

* add pagetitles to all settings2 pages

* add pagetitle to casino

* remove bloat

* remove duplicate site name thingy

* page titles 2

* page titles 3

* remove duplicate imports and add page titles everywhere iirc

* ok but actually this time

* remove unnecessary newlines

* fix title lol

* >

* fsdfsfsfsfsfs

* fsfs

* template configurations

* fix 500

* reduce login template bloat

* move files and add status codes where needful

* move authfroms to login

* remove 2fa bloat

* verification code

* sign up fixes

* readability

* fssfsfsfs

* move forgot password to login/

* readability

* don't emit comments

* add page titles where needful

* gsgsgs

* modals: move to respective pages

* testing on devrama

* get home garbage out of title

* remove insane amount of icon duplication

* sign up text

* add votes pagetitle

* fix blank lines

* Revert "fix blank lines"

This reverts commit b2c54339970725d00b6fc82bb458c1757909952c.

* Fix blank lines on sign_up.html.

* title: votes.html more meaningful identifier.

* titles: Lottery, Directory, Notifications

* head final in submission.html

* fix missing comma

* >

* test

* title: /comments

* fsfsfsfsf

* titles: user_cards

* head: only load video and audio meta attributes if they actually exist

* titlessssss: /admin/lottery/participants

* titlessssssss: extra quote in search.html

* titlessssss: userpage voters.

* titties: /h/<sub>/{followers,blockers,exilees[sic]}

* test banner

* Revert "test banner"

This reverts commit c3d875d03f3e60d72a60dab7d28bf108554a5826.

* make submit.html inherit from default.html

Co-authored-by: TLSM <duolsm@outlook.com>
pull/2/head
justcool393 2022-11-21 00:52:22 -08:00 committed by GitHub
parent 3724edbd47
commit 153fb4e2a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
84 changed files with 628 additions and 1159 deletions

View File

@ -619,6 +619,7 @@ def users_list(v):
users=users,
next_exists=next_exists,
page=page,
user_cards_title="Users Feed",
)

View File

@ -129,4 +129,5 @@ def hat_owners(v, hat_id):
users=users,
next_exists=next_exists,
page=page,
user_cards_title="Hat Owners",
)

View File

@ -27,8 +27,7 @@ def login_get(v):
if not is_site_url(redir) or redir in NO_LOGIN_REDIRECT_URLS:
redir = "/"
if v: return redirect(redir)
return render_template("login.html", failed=False, redirect=redir)
return render_template("login/login.html", failed=False, redirect=redir), 401
def login_deduct_when(resp):
if not g:
@ -58,20 +57,20 @@ def login_post():
if not account:
time.sleep(random.uniform(0, 2))
return render_template("login.html", failed=True)
return render_template("login/login.html", failed=True), 401
if request.values.get("password"):
if not account.verifyPass(request.values.get("password")):
log_failed_admin_login_attempt(account, "password")
time.sleep(random.uniform(0, 2))
return render_template("login.html", failed=True)
return render_template("login/login.html", failed=True), 401
if account.mfa_secret:
now = int(time.time())
hash = generate_hash(f"{account.id}+{now}+2fachallenge")
g.login_failed = False
return render_template("login_2fa.html",
return render_template("login/login_2fa.html",
v=account,
time=now,
hash=hash,
@ -93,12 +92,12 @@ def login_post():
if not account.validate_2fa(request.values.get("2fa_token", "").strip()):
hash = generate_hash(f"{account.id}+{now}+2fachallenge")
log_failed_admin_login_attempt(account, "2FA token")
return render_template("login_2fa.html",
return render_template("login/login_2fa.html",
v=account,
time=now,
hash=hash,
failed=True,
)
), 401
else:
abort(400)
@ -166,7 +165,7 @@ def sign_up_get(v):
ref_user = None
if ref_user and (ref_user.id in session.get("history", [])):
return render_template("sign_up_failed_ref.html")
return render_template("login/sign_up_failed_ref.html"), 403
now = int(time.time())
token = secrets.token_hex(16)
@ -185,14 +184,16 @@ def sign_up_get(v):
if redir:
if not is_site_url(redir): redir = "/"
return render_template("sign_up.html",
status_code = 200 if not error else 400
return render_template("login/sign_up.html",
formkey=formkey,
now=now,
ref_user=ref_user,
turnstile=TURNSTILE_SITEKEY,
error=error,
redirect=redir
)
), status_code
@app.post("/signup")
@ -345,7 +346,7 @@ def sign_up_post(v):
@app.get("/forgot")
def get_forgot():
return render_template("forgot_password.html")
return render_template("login/forgot_password.html")
@app.post("/forgot")
@ -358,7 +359,7 @@ def post_forgot():
email = request.values.get("email",'').strip().lower()
if not email_regex.fullmatch(email):
return render_template("forgot_password.html", error="Invalid email.")
return render_template("login/forgot_password.html", error="Invalid email."), 400
username = username.lstrip('@').replace('\\', '').replace('_', '\_').replace('%', '').strip()
@ -380,8 +381,8 @@ def post_forgot():
v=user)
)
return render_template("forgot_password.html",
msg="If the username and email matches an account, you will be sent a password reset email. You have ten minutes to complete the password reset process.")
return render_template("login/forgot_password.html",
msg="If the username and email matches an account, you will be sent a password reset email. You have ten minutes to complete the password reset process."), 202
@app.get("/reset")
@ -405,7 +406,7 @@ def get_reset():
reset_token = generate_hash(f"{user.id}+{timestamp}+reset+{user.login_nonce}")
return render_template("reset_password.html",
return render_template("login/reset_password.html",
v=user,
token=reset_token,
time=timestamp,
@ -437,11 +438,11 @@ def post_reset(v):
abort(400)
if password != confirm_password:
return render_template("reset_password.html",
return render_template("login/reset_password.html",
v=user,
token=token,
time=timestamp,
error="Passwords didn't match.")
error="Passwords didn't match."), 400
user.passhash = hash_password(password)
g.db.add(user)
@ -455,10 +456,7 @@ def post_reset(v):
@auth_desired
def lost_2fa(v):
if v and not v.mfa_secret: abort(400, "You don't have 2FA enabled")
return render_template(
"lost_2fa.html",
v=v
)
return render_template("login/lost_2fa.html", v=v)
@app.post("/request_2fa_disable")
@limiter.limit("1/second;6/minute;200/hour;1000/day")
@ -468,7 +466,7 @@ def request_2fa_disable():
if not user or not user.email or not user.mfa_secret:
return render_template("message.html",
title="Removal request received",
message="If username, password, and email match, we will send you an email.")
message="If username, password, and email match, we will send you an email."), 202
email=request.values.get("email").strip().lower()
@ -480,7 +478,7 @@ def request_2fa_disable():
if not user.verifyPass(password):
return render_template("message.html",
title="Removal request received",
message="If username, password, and email match, we will send you an email.")
message="If username, password, and email match, we will send you an email."), 202
valid=int(time.time())
token=generate_hash(f"{user.id}+{user.username}+disable2fa+{valid}+{user.mfa_secret}+{user.login_nonce}")
@ -496,7 +494,7 @@ def request_2fa_disable():
return render_template("message.html",
title="Removal request received",
message="If username, password, and email match, we will send you an email.")
message="If username, password, and email match, we will send you an email."), 202
@app.get("/reset_2fa")
def reset_2fa():
@ -520,10 +518,8 @@ def reset_2fa():
abort(403)
user.mfa_secret=None
g.db.add(user)
return render_template("message_success.html",
title="Two-factor authentication removed.",
message="Login normally to access your account.")

View File

@ -1052,6 +1052,7 @@ def bid_list(v, bid):
users=users,
next_exists=next_exists,
page=page,
user_cards_title="Badge Owners",
)

View File

@ -1,5 +1,5 @@
{% extends "default.html" %}
{% block pagetitle %}{{SITE_NAME}}{% endblock %}
{% block pagetitle %}Admin Home{% endblock %}
{% block customPadding %}px-3{% endblock %}
{% block content %}
<h3 class="pb-2 mt-2">Admin Tools</h3>

View File

@ -1,11 +1,11 @@
{% extends "settings2.html" %}
{% block pagetitle %}Alts{% if u %} for @{{u.username}}{% endif %}{% endblock %}
{% block content %}
{% if u %}
<h5 class="mt-3">Alts for <a href="/@{{u.username}}">@{{u.username}}</a></h5>
{% else %}
<h5 class="mt-3">Alts</h5>
{% endif %}
{%- import 'util/macros.html' as macros with context -%}
<section class="username-input-section mb-3">
<form action="/admin/alts" method="get">
<label for="link-input">Username</label>

View File

@ -1,12 +1,6 @@
{% extends "default.html" %}
{% if grant %}
{% set title="Badge Grant" %}
{% else %}
{% set title="Badge Remove" %}
{% endif %}
{% block pagetitle %}{{title}}{% endblock %}
{% block pagetitle %}{{"Badge Grant" if grant else "Badge Remove"}}{% endblock %}
{% block pagetype %}message{% endblock %}
{% block content %}
{% if error %}
<div class="alert alert-danger alert-dismissible fade show my-3" role="alert">
@ -32,12 +26,7 @@
{% endif %}
<h5 class="mt-2">{{title}}</h5>
{% if grant %}
{% set form_action="/admin/badge_grant" %}
{% else %}
{% set form_action="/admin/badge_remove" %}
{% endif %}
{% set form_action = "/admin/badge_grant" if grant else "/admin/badge_remove" %}
<form action="{{form_action}}" method="post">
<input type="hidden" name="formkey" value="{{v|formkey}}">

View File

@ -1,8 +1,5 @@
{% extends "default.html" %}
{% block title %}
<title>Banned Domains</title>
{% endblock %}
{% block pagetitle %}Banned Domains{% endblock %}
{% block content %}

View File

@ -1,5 +1,5 @@
{% 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">

View File

@ -1,5 +1,5 @@
{% 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">

View File

@ -1,5 +1,5 @@
{% extends "default.html" %}
{% block pagetitle %}Lottery Participants{% endblock %}
{% block content %}
<h5 class="my-1">Admin — Lottery Info</h5>
<div class="overflow-x-auto"><table class="table table-striped mb-5">

View File

@ -1,5 +1,5 @@
{% extends "settings2.html" %}
{% block pagetitle %}Shadowbanned Users{% endblock %}
{% block content %}
<div class="overflow-x-auto">

View File

@ -1,8 +1,5 @@
{% extends "default.html" %}
{% block title %}
<title>{{SITE_NAME}} - App</title>
{% endblock %}
{% block pagetitle %}App{% endblock %}
{% block content %}
<div class="ml-3 mt-4">
<b>How to install {{SITE_NAME}}'s mobile app</b>
@ -13,5 +10,4 @@
<div class="font-weight-bold mt-4 mb-2">Second step:</div>
<img onclick="expandDesktopImage()" alt="Second step" style="height:30vh" src="/i/{{SITE_NAME}}/app-{{g.type}}-2.webp">
</div>
{% endblock %}

View File

@ -1,4 +1,5 @@
{% 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>

View File

@ -1,5 +1,5 @@
{% extends "settings2.html" %}
{% block pagetitle %}Permabanned Users{% endblock %}
{% block content %}
<div class="overflow-x-auto"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">

View File

@ -1,7 +1,5 @@
{% extends "settings2.html" %}
{% block pagetitle %}Blocks{% endblock %}
{% block content %}
<h1> Blocks</h1>
<div class="overflow-x-auto mt-3"><table class="table table-striped mb-5">

View File

@ -1,5 +1,5 @@
{% extends "default.html" %}
{% block pagetitle %}Casino{% endblock %}
{# Title (~25char max), Description (~80char max),
Icon (fa-foo-bar), Color (#ff0000), URL (/post/12345/) #}
{%- set GAME_INDEX = [

View File

@ -1,4 +1,6 @@
{% extends "default.html" %} {% block pagetitle %}{{game.capitalize()}}{% endblock %} {% block content %}
{% extends "default.html" %}
{% block pagetitle %}{{game.capitalize()}}{% endblock %}
{% block content %}
<style>
.game_screen-title {
display: flex;

View File

@ -1,4 +1,7 @@
{% extends "default.html" %} {% block content %}
{% extends "default.html" %}
{% 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="margin-top: 3rem;">
<h2>No one was there for Britney…</h2>

View File

@ -1,18 +1,15 @@
{%- import 'util/macros.html' as macros with context -%}
{%- import 'html_head.html' as html_head with context -%}
<!DOCTYPE html>
<html lang="en">
{%- extends 'root.html' -%}
{% if IS_LOCALHOST %}
{% set csp="script-src 'self' 'unsafe-inline' rdrama.net; connect-src 'self'; object-src 'none';" %}
{% else %}
{% set csp=none %}
{% endif %}
{{html_head.html_head(true, true, true, csp, "Chat", false)}}
<body>
{% block pagetitle %}Chat{% endblock %}
{% block pagetype %}chat{% endblock %}
{% block body %}
{% include "header.html" %}
{% include "modals/expanded_image.html" %}
{% include "modals/emoji.html" %}
<div
id="root"
data-id="{{v.id}}"
@ -33,4 +30,4 @@
{% endif %}
<script defer src="{{'js/vendor/lozad.js' | asset}}"></script>
<script defer src="{{'js/vendor/lite-youtube.js' | asset}}"></script>
</body>
{% endblock %}

View File

@ -1,5 +1,5 @@
{% extends "settings2.html" %}
{% block pagetitle %}Chuds{% endblock %}
{% block content %}
<div class="overflow-x-auto"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
@ -15,5 +15,4 @@
</tr>
{% endfor %}
</table>
{% endblock %}

View File

@ -1,25 +1,11 @@
{%- import 'util/macros.html' as macros with context -%}
{%- import 'html_head.html' as html_head with context -%}
<!DOCTYPE html>
<html lang="en">
{% if request.path == '/' %}
{% set csp=CONTENT_SECURITY_POLICY_HOME %}
{% endif %}
<head>
{% block title %}
{% endblock %}
{{html_head.html_head(true, true, true, csp, SITE_NAME, true)}}
{% block head_final %}{% endblock %}
</head>
<body id="{% if request.path != '/comments' %}{% block pagetype %}frontpage{% endblock %}{% endif %}" {% if SITE_NAME == 'rDrama' and v and (v.is_banned or v.agendaposter) %}style="overflow-x: hidden;background:url(/assets/images/backgrounds/anime/1.webp?v=3) center center fixed; background-color: var(--background)"{% elif v and v.background %}style="{% if path != '/formatting' %}overflow-x: hidden; {% endif %} background:url(/assets/images/backgrounds/{{v.background}}?v=3) center center fixed; background-color: var(--background){% if 'anime' not in v.background %};background-size: cover{% endif %}"{% endif %}>
{% block Banner %}
{%- extends 'root.html' -%}
{% set csp = CONTENT_SECURITY_POLICY_HOME if request.path == '/' else CONTENT_SECURITY_POLICY_DEFAULT %}
{% block body_attributes %}id="{% if request.path != '/comments' %}{% block pagetype %}frontpage{% endblock %}{% endif %}" {% if SITE_NAME == 'rDrama' and v and (v.is_banned or v.agendaposter) %}style="overflow-x: hidden;background:url(/assets/images/backgrounds/anime/1.webp?v=3) center center fixed; background-color: var(--background)"{% elif v and v.background %}style="{% if path != '/formatting' %}overflow-x: hidden; {% endif %} background:url(/assets/images/backgrounds/{{v.background}}?v=3) center center fixed; background-color: var(--background){% if 'anime' not in v.background %};background-size: cover{% endif %}"{% endif %}{% endblock %}
{% block body %}
{% block banner %}
{% include "modals/expanded_image.html" %}
{% if '@' not in request.path %}
{% if sub and SITE_NAME != WPD %}
{% set src = sub.banner_url %}
{% set alt = ['/h/', sub, 'banner']|join %}
@ -28,39 +14,21 @@
{% set href = "https://secure.transequality.org/site/Donation2?df_id=1480" %}
{% set expand = false %}
{% endif %}
{{ macros.banner(src, href, alt, expand, class) }}
{{macros.banner(src, href, alt, expand, class)}}
{% endif %}
{% endblock %}
{% include "header.html" %}
{% block mobileUserBanner %}
{% endblock %}
{% block mobileUserBanner %}{% endblock %}
<div class="container">
<div class="row justify-content-around" id="main-content-row">
<div class="col h-100 {% block customPadding %}{% if request.path.startswith('/@') %}user-gutters{% else %}custom-gutters{% endif %}{% endblock %}" id="main-content-col">
{% block desktopUserBanner %}
{% endblock %}
{% block desktopBanner %}
{% endblock %}
{% block PseudoSubmitForm %}
{% endblock %}
{% block searchText %}
{% endblock %}
{% block content %}
{% endblock %}
{% block pagenav %}
{% endblock %}
{% block desktopUserBanner %}{% endblock %}
{% block desktopBanner %}{% endblock %}
{% block PseudoSubmitForm %}{% endblock %}
{% block searchText %}{% endblock %}
{% block content %}{% endblock %}
{% block pagenav %}{% endblock %}
</div>
{% block sidebar %}
{% if has_sidebar and (home or p) %}
@ -69,30 +37,16 @@
{% endblock %}
</div>
</div>
{% block mobilenavbar %}
{% include "mobile_navigation_bar.html" %}
{% endblock %}
{% block actionsModal %}
{% endblock %}
{% block reportCommentModal %}
{% endblock %}
{% block GIFtoast %}
{% endblock %}
{% block GIFpicker %}
{% endblock %}
{% 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" role="alert" aria-live="assertive" aria-atomic="true" 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 class="toast" id="toast-post-success" style="position: fixed; bottom: 1.5rem; margin: 0 auto; left: 0; right: 0; width: 275px; z-index: 1000" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast-body bg-success text-center text-white">
<i class="fas fa-comment-alt-smile mr-2"></i><span id="toast-post-success-text">Action successful!</span>
@ -103,15 +57,10 @@
<i class="fas fa-exclamation-circle mr-2"></i><span id="toast-post-error-text">Error, please try again later.</span>
</div>
</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 %}
{% if not err and v and v.spider %}
<script defer src="{{'js/vendor/critters.js' | asset}}"></script>
<script defer src="{{'js/spider.js' | asset}}"></script>
{% endif %}
</body>
</html>
{% endblock %}

View File

@ -1,9 +1,5 @@
{% extends "default.html" %}
{% block title %}
<title>{{SITE_NAME}} - Donate</title>
{% endblock %}
{% block pagetitle %}Donate{% endblock %}
{% block content %}
<h1 class="py-3">Donate</h1>
<div class="overflow-x-auto">

View File

@ -1,9 +1,5 @@
{% extends "default.html" %}
{% block title %}
<title>{{SITE_NAME}} - Donate</title>
{% endblock %}
{% block pagetitle %}Donate{% endblock %}
{% block content %}
<h1 class="py-3">Donate</h1>
<div class="overflow-x-auto">

View File

@ -1,28 +0,0 @@
{% extends "authforms.html" %}
{% block pagetitle %}{{SITE_NAME}} Password Reset{% endblock %}
{% 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">
<form action="/forgot" method="post" class="mt-3">
<label for="username" class="mt-3">Username</label>
<input autocomplete="off" class="form-control" id="username" aria-describedby="usernameHelp"
type="text" name="username" required="">
<label for="email" class="mt-3">Email</label>
<input type="email" pattern='{{EMAIL_REGEX_PATTERN}}' autocomplete="off" class="form-control" id="password" aria-describedby="passwordHelp" name="email" required>
<input autocomplete="off" class="btn btn-primary login w-100 mt-3" type="submit" onclick="disable(this)" value="Send recovery link">
</form>
</div>
{% endblock %}

View File

@ -1,5 +1,5 @@
{% extends "settings2.html" %}
{% block pagetitle %}Grassed Users{% endblock %}
{% block content %}
<div class="overflow-x-auto">
<table class="table table-striped mb-5">

View File

@ -2,7 +2,7 @@
{% block pagetitle %}Hats{% endblock %}
{% block pagetype %}message{% endblock %}
{% block Banner %}
{% block banner %}
<style>
.shop-tabs {
padding-top: 50px;

View File

@ -1,43 +1,37 @@
{% extends "default.html" %}
{% block title %}
{% if sub %}
{% if sub.bannerurl %}
{% set preview = sub.bannerurl %}
{% elif sub.sidebarurl %}
{% set preview = sub.sidebarurl %}
{% else %}
{% set preview = sub.banner_url %}
{% endif %}
<title>/h/{{sub}}</title>
<meta property="og:type" content="article">
<meta property="og:title" content="/h/{{sub}}">
<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/{{sub}}">
<meta name="twitter:creator" content="{{SITE_FULL}}">
<meta name="twitter:image" content="{{preview}}">
<meta name="twitter:url" content="{{request.full_path}}">
{% if sub.sidebar %}
<meta property="og:description" name="description" content="{{sub.sidebar}}">
<meta name="twitter:description" content="{{sub.sidebar}}">
{% endif %}
{% elif request.path == '/' %}
<title>{{SITE_NAME}}</title>
{% else %}
{{super()}}
{% endif %}
{% endblock %}
{% block desktopBanner %}
{% block head_final %}
{% set preview = sub.siderbarurl if sub and sub.sidebarurl else sub.bannerurl %}
<meta property="og:type" content="article">
<meta property="og:title" content="/h/{{sub}}">
<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/{{sub}}">
<meta name="twitter:creator" content="{{SITE_FULL}}">
<meta name="twitter:image" content="{{preview}}">
<meta name="twitter:url" content="{{request.full_path}}">
{% if sub.sidebar %}
<meta property="og:description" name="description" content="{{sub.sidebar}}">
<meta name="twitter:description" content="{{sub.sidebar}}">
{% endif %}
{% endblock %}
{% block desktopBanner %}
<div class="row" style="overflow: visible;padding-top:5px;">
<div class="col">
<a class="btn btn-primary btn-block mt-3" href="{% if sub %}/h/{{sub}}{% endif %}/submit"><i class="fas fa-feather-alt mr-2"></i>Create Post</a>
@ -136,8 +130,7 @@
{% endblock %}
{% block PseudoSubmitForm %}
{% endblock %}
{% block PseudoSubmitForm %}{% endblock %}
{% block content %}

View File

@ -1,5 +1,6 @@
{% extends "default.html" %}
{% block pagetitle %}All Comments{% endblock %}
{% block PseudoSubmitForm %}{% endblock %}
{% block sortnav %}{% endblock %}

View File

@ -1,9 +1,5 @@
{% extends "default.html" %}
{% block title %}
<title>{{SITE_NAME}} - Live</title>
{% endblock %}
{% block pagetitle %}Live{% endblock %}
{% block content %}
<style>
tr:hover {

View File

@ -1,76 +0,0 @@
{%- import 'util/macros.html' as macros with context -%}
{%- import 'html_head.html' as html_head with context -%}
<!DOCTYPE html>
<html lang="en">
{{html_head.html_head(true, false, false, none, 'Login', false)}}
<body id="login">
<div class="container-fluid position-absolute h-100 p-0 overflow-auto">
<div class="row no-gutters h-100">
<div class="col-12 col-md-6 my-auto p-3">
<div class="row justify-content-center">
<div class="col-10 col-md-7">
{% block content %}
<div id="login-form">
<h2>Welcome back.</h2>
<p class="text-muted mb-md-5">Glad to have you back!</p>
{% if failed %}
<div class="alert alert-danger alert-dismissible fade show d-flex my-3" role="alert">
<i class="fas fa-exclamation-circle my-auto"></i>
<div>
Incorrect username, email address, or password.
<br>
<a href="/forgot" class="alert-link">Forgot password?</a>
</div>
<button type="button" class="close" data-bs-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
{% endif %}
<form action="/login" method="post" class="mt-md-3" id="login">
<label for="username" class="mt-3">Username or Email Address</label>
<input autocomplete="off" class="form-control" id="username" aria-describedby="usernameHelp"
type="text" name="username" required="">
<input type="hidden" name="redirect" value="{{redirect}}">
<label for="password" class="mt-3">Password</label>
<input autocomplete="off" class="form-control" id="password" aria-describedby="passwordHelp"
type="password" name="password" required="">
<small class="d-block my-3"><a href="/forgot">Forgot password?</a></small>
<button type="submit" class="btn btn-primary login w-100 mt-3" id="login_button">Sign In</button>
<div class="text-center text-muted text-small mt-5 mb-3">
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>
{% endblock %}
</div>
</div>
</div>
<div class="col-12 col-md-6 d-mob-none">
<div class="splash-wrapper">
<div class="splash-overlay"></div>
<img alt="cover" loading="lazy" class="splash-img" src="{{'cover.webp' | asset_siteimg}}"></img>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -1,22 +1,20 @@
{%- import 'util/macros.html' as macros with context -%}
{%- import 'html_head.html' as html_head with context -%}
<!DOCTYPE html>
<html lang="en">
{{html_head.html_head(false, false, false, none, SITE_NAME)}}
<body id="login">
<div class="container-fluid position-absolute h-100 p-0">
{%- extends 'root.html' -%}
{% block pagetitle %}Login{% endblock %}
{% block pagetype %}login{% endblock %}
{% block template_config %}
{% set root_scope.js = false %}
{% set root_scope.include_user_css = false %}
{% set root_scope.include_seo = false %}
{% set root_scope.include_cf_2fa_verify = false %}
{% endblock %}
{% block body %}
<div class="container-fluid position-absolute h-100 p-0">
<div class="row no-gutters h-100">
<div class="col-12 col-md-6 my-auto p-3">
<div class="row justify-content-center">
<div class="col-10 col-md-7">
<h2>{% block authtitle %}{% endblock %}</h2>
<p class="text-muted mb-md-5">{% block authtext %}{% endblock %}</p>
{% if error %}
<div class="alert alert-danger alert-dismissible fade show d-flex my-3" role="alert">
<i class="fas fa-exclamation-circle my-auto"></i>
@ -39,30 +37,17 @@
</button>
</div>
{% endif %}
{% block content %}
{% endblock %}
{% block content %}{% endblock %}
</div>
</div>
</div>
<div class="col-12 col-md-6 d-mob-none">
<div class="splash-wrapper">
<div class="splash-overlay"></div>
<img alt="cover" loading="lazy" class="splash-img" src="{{'cover.webp' | asset_siteimg}}"></img>
</div>
</div>
</div>
</div>
</body>
</html>
{% block scripts %}{% endblock %}
{% endblock %}

View File

@ -0,0 +1,15 @@
{% extends "login/authforms.html" %}
{% block pagetitle %}{{SITE_NAME}} Password Reset{% endblock %}
{% 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">
<form action="/forgot" method="post" class="mt-3">
<label for="username" class="mt-3">Username</label>
<input autocomplete="off" class="form-control" id="username" aria-describedby="usernameHelp" type="text" name="username" required="">
<label for="email" class="mt-3">Email</label>
<input type="email" pattern='{{EMAIL_REGEX_PATTERN}}' autocomplete="off" class="form-control" id="password" aria-describedby="passwordHelp" name="email" required>
<input autocomplete="off" class="btn btn-primary login w-100 mt-3" type="submit" onclick="disable(this)" value="Send recovery link">
</form>
</div>
{% endblock %}

View File

@ -0,0 +1,42 @@
{%- extends 'login/authforms.html' -%}
{% block pagetitle %}Login{% endblock %}
{% block pagetype %}login{% endblock %}
{% block template_config %}
{% set root_scope.js = true %}
{% set root_scope.include_user_css = false %}
{% set root_scope.include_seo = false %}
{% set root_scope.include_cf_2fa_verify = false %}
{% endblock %}
{% block authtitle %}Welcome back.{% endblock %}
{% block authtext %}Glad to have you back!{% endblock %}
{% block content %}
<div id="login-form">
{% if failed %}
<div class="alert alert-danger alert-dismissible fade show d-flex my-3" role="alert">
<i class="fas fa-exclamation-circle my-auto"></i>
<div>
Incorrect username, email address, or password.
<br>
<a href="/forgot" class="alert-link">Forgot password?</a>
</div>
<button type="button" class="close" data-bs-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
{% endif %}
<form action="/login" method="post" class="mt-md-3" id="login">
<label for="username" class="mt-3">Username or Email Address</label>
<input autocomplete="off" class="form-control" id="username" aria-describedby="usernameHelp"
type="text" name="username" required="">
<input type="hidden" name="redirect" value="{{redirect}}">
<label for="password" class="mt-3">Password</label>
<input autocomplete="off" class="form-control" id="password" aria-describedby="passwordHelp"
type="password" name="password" required="">
<small class="d-block my-3"><a href="/forgot">Forgot password?</a></small>
<button type="submit" class="btn btn-primary login w-100 mt-3" id="login_button">Sign In</button>
<div class="text-center text-muted text-small mt-5 mb-3">
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>
{% endblock %}

View File

@ -0,0 +1,33 @@
{%- extends 'login/authforms.html' -%}
{% block pagetitle %}Login{% endblock %}
{% block pagetype %}login{% endblock %}
{% block template_config %}
{% set root_scope.js = false %}
{% set root_scope.include_user_css = false %}
{% set root_scope.include_seo = false %}
{% set root_scope.include_cf_2fa_verify = false %}
{% endblock %}
{% block content %}
<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 %}
<div class="alert alert-danger alert-dismissible fade show d-flex my-3" role="alert">
<i class="fas fa-exclamation-circle my-auto"></i>
<div>Invalid verification code. Please try again.</div>
<button type="button" class="close" data-bs-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
{% endif %}
<form action="/login" method="post" class="mt-md-3" id="login">
<input type="hidden" name="username" value="{{v.username}}">
<input type="hidden" name="redirect" value="{{redirect}}">
<input type="hidden" name="time" value="{{time}}">
<input type="hidden" name="hash" value="{{hash}}">
<label for="2fa_token" class="mt-3">Your verification code</label>
<input autocomplete="off" class="form-control" id="2fa_token" name="2fa_token" type="text" placeholder="6-digit code">
<small><a href="/lost_2fa">Lost your 2FA device?</a></small>
<button type="submit" class="btn btn-primary login w-100 mt-3" id="login_button">Sign in</button>
</form>
{% endblock %}

View File

@ -0,0 +1,17 @@
{% extends "login/authforms.html" %}
{% block pagetitle %}{{SITE_NAME}} Two-Factor Removal{% endblock %}
{% 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">
<form action="/request_2fa_disable" method="post" class="mt-3">
<label for="username" class="mt-3">Username</label>
<input autocomplete="off" class="form-control" id="username" aria-describedby="usernameHelp" type="text" name="username" required=""{% if v %} value="{{v.username}}" disabled{% endif %}>
<label for="email" class="mt-3">Password</label>
<input autocomplete="off" class="form-control" id="password" aria-describedby="passwordHelp" type="password" name="password" required="">
<label for="email" class="mt-3">Email</label>
<input autocomplete="off" class="form-control" id="password" type="email" pattern='{{EMAIL_REGEX_PATTERN}}' name="email" required=""{% if v %} value="{{v.email}}" disabled{% endif %}>
<input autocomplete="off" class="btn btn-primary login w-100 mt-3" type="submit" onclick="disable(this)" value="Send recovery link">
</form>
</div>
{% endblock %}

View File

@ -0,0 +1,17 @@
{% extends "login/authforms.html" %}
{% block pagetitle %}{{SITE_NAME}} Password Reset{% endblock %}
{% block authtitle %}Change your password.{% endblock %}
{% block content %}
<div id="login-form">
<form action="/reset" method="post" class="mt-3">
<input type="hidden" name="time" value="{{time}}">
<input type="hidden" name="user_id" value="{{v.id}}">
<input type="hidden" name="token" value="{{token}}">
<label for="passentry" class="mt-3">New Password</label>
<input autocomplete="off" class="form-control" id="passentry" aria-describedby="usernameHelp" type="password" name="password" required="">
<label for="confentry" class="mt-3">Confirm New Password</label>
<input autocomplete="off" class="form-control" id="confentry" aria-describedby="passwordHelp" type="password" name="confirm_password" required="">
<input autocomplete="off" class="btn btn-primary login w-100 mt-3" type="submit" onclick="disable(this)" value="Change password">
</form>
</div>
{% endblock %}

View File

@ -0,0 +1,117 @@
{%- extends 'login/authforms.html' -%}
{% block pagetitle -%}
{{ref_user.username + " invites you to " + SITE_NAME if ref_user else "Sign Up"}}
{%- endblock %}
{% block pagetype %}login{% endblock %}
{% block template_config %}
{% set root_scope.js = true %}
{% set root_scope.include_user_css = false %}
{% set root_scope.include_seo = false %}
{% set root_scope.include_cf_2fa_verify = false %}
{% endblock %}
{% set login_namespace = namespace() %}
{% if ref_user %}
{% set login_namespace.authtitle = '@' + ref_user.username + ' has invited you!' %}
{% set login_namespace.authtext = 'Looks like someone wants you to join ' + SITE_NAME + '.' %}
{% elif not site_settings['login_required'] %}
{% set login_namespace.authtitle = "Create your account." %}
{% set login_namespace.authtext = "No email address required." %}
{% endif %}
{% if ref_user or not site_settings['login_required'] %}
{% block authtitle %}{{login_namespace.authtitle}}{% endblock %}
{% block authtext %}{{login_namespace.authtext}}{% endblock %}
{% endif %}
{% block content %}
<div id="register-form">
{% if not ref_user and SITE_NAME == 'rDrama' and site_settings['login_required'] %}
<p class="text-muted text-justify mb-3" style="line-height: 1.2em">
Hiiiiii its your favorite user Carp! Were currently on <span style="font-variant-caps: small-caps;">Login Required</span> mode for one of a few reasons:
</p>
<ol style="padding-left: 1.5em">
<li>The site is running really slowly and we think it might be miscreants up to no good, or</li>
<li>Its our monthly 24 hours of login-required-mode to encourage lovely lurkers to become lovely new friends of ours, or</li>
<li>Someone clicked the toggle by mistake lol oops sorry!</li>
</ol>
<p class="text-muted text-justify mb-1" style="line-height: 1.2em">
But thats all fine. Signing up is easy. It takes literally like 4 seconds if youre slow. You dont even need an email! Just pick a username, make up some neat new password where you replace all the es with 3s or whatever and bam, done, youre in.<br>
Remember to click “Follow” on my profile!
</p>
<p class="text-muted mb-md-2">
I love you.<br>
<em>xoxo carp</em> 💋
</p>
<hr>
{% elif not ref_user and SITE_NAME == 'WPD' and site_settings['login_required'] %}
<p class="text-muted text-justify mb-1" style="line-height: 1.2em">
<strong>Hi you!</strong> &mdash; <span style="font-variant-caps: small-caps;">watchpeopledie.tv</span> is currently doing our monthly 24(ish) hours of "everyone needs to have an account" &mdash; sorry about that! But making an account is actually super easy. <strong>You don't even need an email address!</strong> Literally just pick a username, set a password, and that's that. Bam, done, like 8 seconds, tops.<br>
</p>
<p class="text-muted mb-md-2">
We WANT you with us &#128150;<br>
Please join!
</p>
<hr>
{% endif %}
<form action="/signup" method="post" class="mt-md-3" id="signup">
{% if error %}<div class="text-danger mb-2">{{error}}</div>{% endif %}
<input type="hidden" name="formkey" value="{{formkey}}">
<input type="hidden" name="now" value="{{now}}">
{% if redirect %}<input type="hidden" name="redirect" value="{{redirect}}">{% endif %}
{% if ref_user %}<input type="hidden" name="referred_by" value="{{ref_user.id}}">{% endif %}
<label for="username-register" class="mt-3">Username</label>
<input autocomplete="off" class="form-control" id="username-register"
aria-describedby="usernameHelpRegister" type="text" name="username" pattern="[a-zA-Z0-9_\-]{3,25}" min="3" max="25" required="">
<small id="usernameHelpRegister"></small>
<label for="email-register" class="mt-3">Email Address</label>
<small class="d-inline-block text-muted ml-1">(optional)</small>
<input style="background-color: var(--gray-800)" autocomplete="off" class="form-control" id="email-register"
aria-describedby="emailHelpRegister" type="email" pattern='{{EMAIL_REGEX_PATTERN}}' name="email" readonly onfocus="if (this.hasAttribute('readonly')) {this.removeAttribute('readonly');this.blur();this.focus()}">
<label for="password-register" class="mt-3">Password</label>
<input autocomplete="off" class="form-control" id="password-register"
aria-describedby="passwordHelpReigster" type="password" name="password" required="">
<small id="passwordHelpRegister" class="form-text font-weight-bold text-muted d-none mt-1">Minimum of 8
characters
required.</small>
<small id="passwordHelpSuccess" class="form-text font-weight-bold text-success d-none mt-1">Your password meets the requirements.
</small>
<label for="password_confirm" class="mt-3">Confirm Password</label>
<input autocomplete="off" class="form-control" id="password_confirm"
aria-describedby="passwordConfirmHelp" type="password" name="password_confirm"
required="">
<div class="custom-control custom-checkbox mt-4">
<input autocomplete="off" type="checkbox" class="custom-control-input" id="termsCheck" required>
<label class="custom-control-label terms" for="termsCheck">I accept the <a href="/sidebar">rules</a></label>
</div>
{% if turnstile != DEFAULT_CONFIG_VALUE %}
<div class="cf-turnstile" data-sitekey="{{turnstile}}" data-theme="dark"></div>
{% endif %}
<button type="submit" class="btn btn-primary login w-100 mt-3" id="register_button">Register</button>
<div class="text-center text-muted text-small mt-5 mb-3">
Already have an account? <a href="/login{{'?redirect='+redirect if redirect else ''}}" class="font-weight-bold toggle-login">Log in</a>
</div>
</form>
</div>
{% endblock %}
{% block scripts %}
<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 %}
{% endblock %}

View File

@ -0,0 +1,25 @@
{%- extends 'login/authforms.html' -%}
{% block pagetitle %}Sign Up: Error{% endblock %}
{% block pagetype %}login{% endblock %}
{% block template_config %}
{% set root_scope.js = true %}
{% set root_scope.include_user_css = false %}
{% set root_scope.include_seo = true %}
{% set root_scope.include_cf_2fa_verify = false %}
{% 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-5 mb-3">
Already have an account? <a href="/login{{'?redirect='+redirect if redirect else ''}}" class="font-weight-bold toggle-login">Log in</a>
</div>
{% endblock %}
{% block scripts %}
<div class="toast clipboard" id="toast-success" role="alert" aria-live="assertive" aria-atomic="true" 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>
{% endblock %}

View File

@ -1,78 +0,0 @@
{%- import 'util/macros.html' as macros with context -%}
{%- import 'html_head.html' as html_head with context -%}
<!DOCTYPE html>
<html lang="en">
{{html_head.html_head(false, false, false, none, "Login", false)}}
<head>
<body id="login">
<div class="container-fluid position-absolute h-100 p-0 overflow-auto">
<div class="row no-gutters h-100">
<div class="col-12 col-md-6 my-auto p-3">
<div class="row justify-content-center">
<div class="col-10 col-md-7">
<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 %}
<div class="alert alert-danger alert-dismissible fade show d-flex my-3" role="alert">
<i class="fas fa-exclamation-circle my-auto"></i>
<div>
Invalid verification code. Please try again.
</div>
<button type="button" class="close" data-bs-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
{% endif %}
<form action="/login" method="post" class="mt-md-3" id="login">
<input type="hidden" name="username" value="{{v.username}}">
<input type="hidden" name="redirect" value="{{redirect}}">
<input type="hidden" name="time" value="{{time}}">
<input type="hidden" name="hash" value="{{hash}}">
<label for="2fa_token" class="mt-3">Your verification code</label>
<input autocomplete="off" class="form-control" id="2fa_token" name="2fa_token" type="text" placeholder="6-digit code">
<small><a href="/lost_2fa">Lost your 2FA device?</a></small>
<button type="submit" class="btn btn-primary login w-100 mt-3" id="login_button">Sign in</button>
</form>
</div>
</div>
</div>
</div>
<div class="col-12 col-md-6 d-mob-none">
<div class="splash-wrapper">
<div class="splash-overlay"></div>
<img alt="cover" loading="lazy" class="splash-img" src="{{'cover.webp' | asset_siteimg}}"></img>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -1,35 +0,0 @@
{% extends "authforms.html" %}
{% block pagetitle %}{{SITE_NAME}} Two-Factor Removal{% endblock %}
{% 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">
<form action="/request_2fa_disable" method="post" class="mt-3">
<label for="username" class="mt-3">Username</label>
<input autocomplete="off" class="form-control" id="username" aria-describedby="usernameHelp"
type="text" name="username" required=""{% if v %} value="{{v.username}}" disabled{% endif %}>
<label for="email" class="mt-3">Password</label>
<input autocomplete="off" class="form-control" id="password" aria-describedby="passwordHelp"
type="password" name="password" required="">
<label for="email" class="mt-3">Email</label>
<input autocomplete="off" class="form-control" id="password" type="email" pattern='{{EMAIL_REGEX_PATTERN}}' name="email" required=""{% if v %} value="{{v.email}}" disabled{% endif %}>
<input autocomplete="off" class="btn btn-primary login w-100 mt-3" type="submit" onclick="disable(this)" value="Send recovery link">
</form>
</div>
{% endblock %}

View File

@ -1,4 +1,7 @@
{% extends "default.html" %} {% block content %}
{% extends "default.html" %}
{% block pagetype %}lottery{% endblock %}
{% block pagetitle %}Lottershe{% endblock %}
{% block content %}
<div style="margin-top: 5rem">
<div class="lottery-page--wrapper">
<div class="lottery-page--image">
@ -131,7 +134,7 @@
</button>
</div>
<!-- Success -->
{# Success #}
<div
class="toast"
id="lottery-post-success"
@ -158,7 +161,7 @@
</div>
</div>
<!-- Error -->
{# Error #}
<div
class="toast"
id="lottery-post-error"
@ -185,8 +188,6 @@
</div>
</div>
</div>
<script defer src="{{'js/lottery.js' | asset}}"></script>
</div>
{% endblock %}

View File

@ -1,4 +1,6 @@
{% extends "default.html" %}
{% block pagetitle %}Marseys{% endblock %}
{% block pagetype %}marseys{% endblock %}
{% block content %}
<div class="overflow-x-auto mt-3"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">

View File

@ -1,5 +1,6 @@
{% extends "default.html" %}
{% block pagetitle %}Directory{% endblock %}
{% block pagetype %}directory{% endblock %}
{# Title (~25char max), Description (~80char max),
Icon (fa-foo-bar), Color (#ff0000), URL (/post/12345/) #}
{%- set MEGATHREAD_INDEX = [] -%}

View File

@ -1,11 +1,6 @@
{% extends "default.html" %}
{% block title %}
<title>{{title}}</title>
{% endblock %}
{% block pagetitle %}{{title}}{% endblock %}
{% block pagetype %}message-success{% endblock %}
{% block content %}
<div class="text-center py-7 py-md-8">

View File

@ -1,39 +0,0 @@
{% extends "default.html" %}
{% block PseudoSubmitForm %}{% endblock %}
{% block customPadding %}{% endblock %}
{% block content %}
<div class="row mt-3 p-md-4">
{% block maincontent %}
{% endblock %}
</div>
{% endblock %}
{% block pagenav %}
<nav aria-label="Page navigation">
<ul class="pagination pagination-sm mb-0">
{% if page>1 %}
<li class="page-item">
<small><a class="page-link" href="?kind={{kind}}&page={{page-1}}" tabindex="-1">Prev</a></small>
</li>
{% else %}
<li class="page-item disabled"><span class="page-link">Prev</span></li>
{% endif %}
{% if next_exists %}
<li class="page-item">
<small><a class="page-link" href="?kind={{kind}}&page={{page+1}}">Next</a></small>
</li>
{% else %}
<li class="page-item disabled"><span class="page-link">Next</span></li>
{% endif %}
</ul>
</nav>
{% endblock %}

View File

@ -0,0 +1,54 @@
<div class="modal fade" id="2faModal" tabindex="-1" role="dialog" aria-labelledby="2faModalTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">
{% if mfa_secret %}
Setup two-step login
{% elif mfa_secret and not v.email %}
Email required for two-step login
{% else %}
Disable two-step login
{% endif %}
</h5>
<button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
<span aria-hidden="true"><i class="far fa-times"></i></span>
</button>
</div>
<form action="/settings/security" method="post">
<input type="hidden" name="formkey" value="{{v|formkey}}">
<input type="hidden" name="2fa_secret" value="{{mfa_secret}}">
<div class="modal-body">
{% if mfa_secret %}
<p><span class="font-weight-bold">Step 1:</span> Scan this barcode (or enter the code) using a two-factor authentication app such as Google Authenticator or Authy.</p>
<div class="text-center mb-3">
<img alt="two-factor QR code" loading="lazy" class="img-fluid" width=175 src="/2faqr/{{mfa_secret}}">
<div class="text-small text-muted mt-1">Or enter this code: {{mfa_secret}}</div>
</div>
<p><span class="font-weight-bold">Step 2:</span> Enter the six-digit code generated in the authenticator app and your {{SITE_NAME}} account password.</p>
<label for="2fa_input">6-digit code</label>
<input autocomplete="off" type="text" class="form-control mb-2" id="2fa_input" name="2fa_token" placeholder="# # # # # #" required>
<label for="2fa_input_password">Password</label>
<input autocomplete="off" type="password" class="form-control mb-2" id="2fa_input_password" name="password" oninput="document.getElementById('toggle2faButton').disabled=false" required>
{% else %}
<div class="alert alert-warning" role="alert">
<i class="fas fa-info-circle"></i>
To disable two-step login, please enter your {{SITE_NAME}} account password and the 6-digit code generated in your authentication app. If you no longer have your two-step device, <a href="/lost_2fa">click here</a>.
</div>
<label for="2fa_input_password">Password</label>
<input autocomplete="off" type="password" class="form-control mb-2" id="2fa_input_password" name="password" required>
<label for="2fa_input">6-digit code</label>
<input autocomplete="off" type="text" class="form-control mb-2" id="2fa_input" name="2fa_remove" placeholder="# # # # # #" oninput="document.getElementById('toggle2faButton').disabled=false" required>
{% endif %}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-link text-muted" data-bs-dismiss="modal">Cancel</button>
<input autocomplete="off" id="toggle2faButton" class="btn btn-primary" type="submit" onclick="disable(this)" value="Enable 2-step login" disabled>
</div>
</form>
</div>
</div>
</div>

View File

@ -0,0 +1,22 @@
<div class="modal fade" id="blockmodal" tabindex="-1" role="dialog" aria-labelledby="blockmodal" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<form class="m-auto" action="/settings/block" id="block-form" method="post" onsubmit="return false;">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Block users</h5>
<button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
<span aria-hidden="true"><i class="far fa-times"></i></span>
</button>
</div>
<div class="modal-body">
<input type="hidden" name="formkey" value="{{v|formkey}}">
<input autocomplete="off" type="text" name="username" placeholder="Enter username..." id="block-username" class="form-control" maxlength=25 required>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-link text-muted" data-bs-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-primary" id="blockUserButton" onclick="block_user()">Block user</button>
</div>
</div>
</form>
</div>
</div>

View File

@ -1,13 +1,10 @@
{% extends "default.html" %}
{% block pagetype %}{% endblock %}
{% block pagetitle %}Notifications{% endblock %}
{% block pagetype %}notifications{% endblock %}
{% block PseudoSubmitForm %}{% endblock %}
{% block navbar %}
<div class="font-weight-bold py-3"></div>
{% endblock %}
{% block content %}
<div class="row border-bottom bg-white w-200 pr-0" style="overflow: visible;">
@ -162,5 +159,4 @@
</style>
{% endblock %}
{% block GIFpicker %}
{% endblock %}
{% block GIFpicker %}{% endblock %}

View File

@ -1,5 +1,5 @@
{% 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">

View File

@ -1,33 +0,0 @@
{% extends "authforms.html" %}
{% block pagetitle %}{{SITE_NAME}} Password Reset{% endblock %}
{% block authtitle %}Change your password.{% endblock %}
{% block content %}
<div id="login-form">
<form action="/reset" method="post" class="mt-3">
<input type="hidden" name="time" value="{{time}}">
<input type="hidden" name="user_id" value="{{v.id}}">
<input type="hidden" name="token" value="{{token}}">
<label for="passentry" class="mt-3">New Password</label>
<input autocomplete="off" class="form-control" id="passentry" aria-describedby="usernameHelp"
type="password" name="password" required="">
<label for="confentry" class="mt-3">Confirm New Password</label>
<input autocomplete="off" class="form-control" id="confentry" aria-describedby="passwordHelp"
type="password" name="confirm_password" required="">
<input autocomplete="off" class="btn btn-primary login w-100 mt-3" type="submit" onclick="disable(this)" value="Change password">
</form>
</div>
{% endblock %}

View File

@ -0,0 +1,32 @@
{% set root_scope = namespace() %}
{% block template_config %}
{% set root_scope.js = true %}
{% set root_scope.include_user_css = true %}
{% set root_scope.include_seo = true %}
{% set root_scope.include_cf_2fa_verify = false %}
{% endblock %}
{%- import 'util/macros.html' as macros with context -%}
{%- import 'util/html_head.html' as html_head with context -%}
{%- if request.path == '/' -%}
{%- set csp=CONTENT_SECURITY_POLICY_HOME -%}
{%- endif -%}
<!DOCTYPE html>
<html lang="en">
<head>
{% block head %}
<meta charset="utf-8">
<meta http-equiv="Content-Security-Policy" content="{{csp | default(CONTENT_SECURITY_POLICY_DEFAULT, true) | safe}}">
{% block title %}<title>{% block pagetitle %}if you see this pls report it as a bug &lt;3{% endblock %} - {{SITE_NAME}}</title>{% endblock %}
{% set page_title = self.pagetitle() %}
{{html_head.page_meta(page_title or none)}}
{{html_head.javascript() if root_scope.js}}
{{html_head.stylesheets(root_scope.include_user_css)}}
{{html_head.seo() if root_scope.include_seo}}
{{html_head.cf_2fa_verify() if root_scope.include_2fa_verify}}
{% block head_final %}{% endblock %}
{% endblock %}
</head>
<body {% block body_attributes %}id="{%block pagetype %}{% endblock %}"{% endblock %}>
{% block body required %}{% endblock %}
</body>
</html>

View File

@ -1,9 +1,8 @@
{% extends "default.html" %}
{% block pagetype %}search{% endblock %}
{% block title %}
<title>Search for "{{query}}" - {{SITE_NAME}}"</title> <meta name="description" content="{{total}} result{{'s' if total != 1 else ''}}">
{% block pagetitle %}Search for "{{query}}"{% endblock %}
{% block head_final %}
<meta name="description" content="{{total}} result{{'s' if total != 1 else ''}}">
{% endblock %}
{% block PseudoSubmitForm %}
@ -16,16 +15,10 @@
</span>
</form>
{% endblock %}
{% block navbar %}
{% endblock %}
{% block navbar %}{% endblock %}
{% block content %}
<div class="row no-gutters my-md-3">
<div class="col">
<div class="card search-results">
<div class="card-header bg-white d-none">
@ -132,20 +125,13 @@
</div>
</div>
{% endif %}
</div>
</div>
</div>
</div>
</div>
{% if not '/users' in request.path %}
<div class="flex-row tab-bar sticky d-none">
<ul class="nav post-nav mr-auto">
<li class="nav-item">
<a class="nav-link{% if sort=='top' %} active{% endif %}" href="?sort=top&q={{query | urlencode}}&t={{t}}"><i class="fas fa-arrow-alt-circle-up"></i>Top</a>
@ -169,10 +155,8 @@
<a class="nav-link{% if sort=='random' %} active{% endif %}" href="?sort=random&q={{query | urlencode}}&t={{t}}"><i class="fas fa-arrow-alt-circle-down"></i>Random</a>
</li>
</ul>
</div>
{% endif %}
<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">
@ -190,22 +174,16 @@
</div>
</div>
</div>
<div class="row no-gutters">
<div class="col-12">
<div class="posts" id="posts">
{% block listing_template %}
{% include "submission_listing.html" %}
{% endblock %}
</div>
</div>
</div>
{% endblock %}
{% block pagenav %}
<nav aria-label="Page navigation">
<ul class="pagination pagination-sm mb-0">
@ -219,5 +197,4 @@
</li>
</ul>
</nav>
{% endblock %}

View File

@ -1,9 +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>
{% endblock %}
{% block listinglength %}{{users | length}}{% endblock %}

View File

@ -1,13 +1,8 @@
{%- import 'util/macros.html' as macros with context -%}
{%- import 'html_head.html' as html_head with context -%}
<!DOCTYPE html>
<html lang="en">
<head>
<title>{% block pagetitle %}Settings - {{SITE_NAME}}{% endblock %}</title>
</head>
{{html_head.html_head(true, false, true, none, "Settings", false)}}
<body id="settings" {% if SITE_NAME == 'rDrama' and v and (v.is_banned or v.agendaposter) %}style="overflow-x: hidden;background:url(/assets/images/backgrounds/anime/1.webp?v=3) center center fixed; background-color: var(--background)"{% elif v and v.background %}style="overflow-x: hidden;background:url(/assets/images/backgrounds/{{v.background}}?v=3) center center fixed; background-color: var(--background){% if 'anime' not in v.background %};background-size: cover{% endif %}"{% endif %}>
{%- extends 'root.html' -%}
{% import 'settings/common.html' as common with context %}
{% block pagetitle %}Settings{% endblock %}
{% block body_attributes %}id="settings" {% if SITE_NAME == 'rDrama' and v and (v.is_banned or v.agendaposter) %}style="overflow-x: hidden;background:url(/assets/images/backgrounds/anime/1.webp?v=3) center center fixed; background-color: var(--background)"{% elif v and v.background %}style="overflow-x: hidden;background:url(/assets/images/backgrounds/{{v.background}}?v=3) center center fixed; background-color: var(--background){% if 'anime' not in v.background %};background-size: cover{% endif %}"{% endif %}{% endblock %}
{% block body %}
{% include "header.html" %}
<div class="container">
<div class="row justify-content-around">
@ -62,80 +57,10 @@
</ul>
</nav>
</div>
{% block content %}
{% endblock %}
{% block content %}{% endblock %}
</div>
</div>
</div>
{% if request.path == '/settings/security' %}
<div class="modal fade" id="2faModal" tabindex="-1" role="dialog" aria-labelledby="2faModalTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">{% if mfa_secret %}Setup two-step login{% elif mfa_secret and not v.email %}Email required for two-step login{% else %}Disable two-step login{% endif %}</h5>
<button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
<span aria-hidden="true"><i class="far fa-times"></i></span>
</button>
</div>
{% if mfa_secret %}
<div>
<form action="/settings/security" method="post">
<input type="hidden" name="formkey" value="{{v|formkey}}">
<input type="hidden" name="2fa_secret" value="{{mfa_secret}}">
<div class="modal-body">
<p>
<span class="font-weight-bold">Step 1:</span> Scan this barcode (or enter the code) using a two-factor authentication app such as Google Authenticator or Authy.
</p>
<div class="text-center mb-3">
<img alt="two-factor QR code" loading="lazy" class="img-fluid" width=175 src="/2faqr/{{mfa_secret}}">
<div class="text-small text-muted mt-1">Or enter this code: {{mfa_secret}}</div>
</div>
<p>
<span class="font-weight-bold">Step 2:</span> Enter the six-digit code generated in the authenticator app and your {{SITE_NAME}} account password.
</p>
<label for="2fa_input">6-digit code</label>
<input autocomplete="off" type="text" class="form-control mb-2" id="2fa_input" name="2fa_token" placeholder="# # # # # #" required>
<label for="2fa_input_password">Password</label>
<input autocomplete="off" type="password" class="form-control mb-2" id="2fa_input_password" name="password" oninput="document.getElementById('enable2faButton').disabled=false" required>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-link text-muted" data-bs-dismiss="modal">Cancel</button>
<input autocomplete="off" id="enable2faButton" class="btn btn-primary" type="submit" onclick="disable(this)" value="Enable 2-step login" disabled>
</div>
</form>
</div>
{% else %}
<div>
<form action="/settings/security" method="post">
<input type="hidden" name="formkey" value="{{v|formkey}}">
<input type="hidden" name="2fa_secret" value="{{mfa_secret}}">
<div class="modal-body">
<div class="alert alert-warning" role="alert">
<i class="fas fa-info-circle"></i>
To disable two-step login, please enter your {{SITE_NAME}} account password and the 6-digit code generated in your authentication app. If you no longer have your two-step device, <a href="/lost_2fa">click here</a>.
</div>
<label for="2fa_input_password">Password</label>
<input autocomplete="off" type="password" class="form-control mb-2" id="2fa_input_password" name="password" required>
<label for="2fa_input">6-digit code</label>
<input autocomplete="off" type="text" class="form-control mb-2" id="2fa_input" name="2fa_remove" placeholder="# # # # # #" oninput="document.getElementById('disable2faButton').disabled=false" required>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-link text-muted" data-bs-dismiss="modal">Cancel</button>
<input autocomplete="off" id="disable2faButton" class="btn btn-primary" type="submit" onclick="disable(this)" value="Disable 2-step login" disabled>
</div>
</form>
</div>
{% endif %}
</div>
</div>
</div>
{% endif %}
</div>
{% block clipboard %}
<div class="toast clipboard" id="toast-success" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast-body text-center">
@ -155,5 +80,4 @@
</div>
{% block onload %}{% endblock %}
<script defer src="{{'js/vendor/clipboard.js' | asset}}"></script>
</body>
</html>
{% endblock %}

View File

@ -1,7 +1,6 @@
{% extends "settings.html" %}
{% block pagetitle %}Advanced Settings - {{SITE_NAME}}{% endblock %}
{% block pagetitle %}Advanced Settings{% endblock %}
{% block content %}
{% import 'settings/common.html' as common with context %}
<div class="row settings-page" id="settings-page-advanced">
<div class="col col-lg-8">
<div class="settings">

View File

@ -1,5 +1,5 @@
{% extends "settings.html" %}
{% block pagetitle %}Apps/Bots - {{SITE_NAME}}{% endblock %}
{% block pagetitle %}Apps/Bots{% endblock %}
{% block content %}
<div class="row">
<div class="col col-lg-8">

View File

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

View File

@ -1,6 +1,5 @@
{% extends "settings.html" %}
{% block pagetitle %}Personal Settings - {{SITE_NAME}}{% endblock %}
{% import 'settings/common.html' as common with context %}
{% block pagetitle %}Personal Settings{% endblock %}
{% block content %}
<style>
.bg-image {

View File

@ -1,5 +1,5 @@
{% extends "settings.html" %}
{% block pagetitle %}Security Settings - {{SITE_NAME}}{% endblock %}
{% 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">
@ -198,28 +198,8 @@
</div>
</div>
</div>
<div class="modal fade" id="blockmodal" tabindex="-1" role="dialog" aria-labelledby="blockmodal" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<form class="m-auto" action="/settings/block" id="exile-form" method="post" onsubmit="return false;">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Block users</h5>
<button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
<span aria-hidden="true"><i class="far fa-times"></i></span>
</button>
</div>
<div class="modal-body">
<input type="hidden" name="formkey" value="{{v|formkey}}">
<input autocomplete="off" type="text" name="username" placeholder="Enter username..." id="exile-username" class="form-control" maxlength=25 required>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-link text-muted" data-bs-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-primary" id="exileUserButton" onclick="block_user()">Block user</button>
</div>
</div>
</form>
</div>
</div>
{%- include 'modals/2fa.html' -%}
{%- include 'modals/blockuser.html' -%}
<div class="toast error" id="toast-exile-error" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast-body text-center">

View File

@ -1,22 +1,8 @@
{%- import 'util/macros.html' as macros with context -%}
{%- import 'html_head.html' as html_head with context -%}
<!DOCTYPE html>
<html lang="en">
{%-
set PAGE_TITLES = {
'/leaderboard': 'Leaderboard',
'/admins': 'Admins',
'/log': 'Modlog',
'/banned': 'Permabanned',
'/blocks': 'Blocks',
}
-%}
{%- set title = SITE_NAME if not request.path in PAGE_TITLES else PAGE_TITLES[request.path] -%}
{{html_head.html_head(true, false, true, none, title)}}
<body id="settings2" {% if SITE_NAME == 'rDrama' and v and (v.is_banned or v.agendaposter) %}style="overflow-x: hidden;background:url(/assets/images/backgrounds/anime/1.webp?v=3) center center fixed; background-color: var(--background)"{% elif v and v.background %}style="overflow-x: hidden;background:url(/assets/images/backgrounds/{{v.background}}?v=3) center center fixed; background-color: var(--background){% if 'anime' not in v.background %};background-size: cover{% endif %}"{% endif %}>
{%- extends 'root.html' -%}
{% block pagetitle %}User List{% endblock %}
{% block body_attributes %}id="settings2" {% if SITE_NAME == 'rDrama' and v and (v.is_banned or v.agendaposter) %}style="overflow-x: hidden;background:url(/assets/images/backgrounds/anime/1.webp?v=3) center center fixed; background-color: var(--background)"{% elif v and v.background %}style="overflow-x: hidden;background:url(/assets/images/backgrounds/{{v.background}}?v=3) center center fixed; background-color: var(--background){% if 'anime' not in v.background %};background-size: cover{% endif %}"{% endif %}{% endblock %}
{% block body %}
{% 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;">
@ -88,8 +74,7 @@ set PAGE_TITLES = {
<div class="{% if request.path == '/banned' or request.path == '/blocks' %}container-fluid{% else %}container{% endif %} {% if request.path in ['/leaderboard', '/paypigs', '/patrons'] %}px-0{% endif %}">
{% block content %}
{% endblock %}
{% block content %}{% endblock %}
</div>
@ -116,28 +101,10 @@ set PAGE_TITLES = {
<i class="fas fa-exclamation-circle mr-2"></i><span id="toast-post-error-text">Error, please try again later.</span>
</div>
</div>
{% block mobilenavbar %}
{% include "mobile_navigation_bar.html" %}
{% block mobilenavbar %}{% include "mobile_navigation_bar.html" %}{% endblock %}
{% block invitationModal %}{% endblock %}
{% block exileModal %}{% endblock %}
{% block approveModal %}{% endblock %}
{% block errorToasts %}{% endblock %}
{% block scripts %}{% endblock %}
{% endblock %}
{% block invitationModal %}
{% endblock %}
{% block exileModal %}
{% endblock %}
{% block approveModal %}
{% endblock %}
{% block errorToasts %}
{% endblock %}
{% block scripts %}
{% endblock %}
</body>
</html>

View File

@ -7,7 +7,7 @@
-%}
{% block pagetitle %}Shop{% endblock %}
{% block pagetype %}message{% endblock %}
{% block Banner %}
{% block banner %}
<style>
.shop-tabs {
padding-top: 50px;

View File

@ -1,139 +0,0 @@
{%- import 'util/macros.html' as macros with context -%}
{%- import 'html_head.html' as html_head with context -%}
<!DOCTYPE html>
<html lang="en">
{% if ref_user %}
{% set title= ref_user.username + "invites you to " + SITE_NAME %}
{% else %}
{% set title="Sign Up" %}
{% endif %}
{{html_head.html_head(true, false, false, none, title, false)}}
<body id="login">
<div class="container-fluid position-absolute h-100 p-0 overflow-auto">
<div class="row no-gutters h-100">
<div class="col-12 col-md-6 my-auto p-3">
<div class="row justify-content-center">
<div class="col-10 col-md-7">
<div id="register-form">
{% if ref_user %}
<h2>@{{ref_user.username}} has invited you!</h2>
<p class="text-muted mb-md-2">Looks like someone wants you to join {{SITE_NAME}}.</p>
{% elif SITE_NAME == 'rDrama' and site_settings['login_required'] %}
<p class="text-muted text-justify mb-3" style="line-height: 1.2em">
Hiiiiii its your favorite user Carp! Were currently on <span style="font-variant-caps: small-caps;">Login Required</span> mode for one of a few reasons:
</p>
<ol style="padding-left: 1.5em">
<li>The site is running really slowly and we think it might be miscreants up to no good, or</li>
<li>Its our monthly 24 hours of login-required-mode to encourage lovely lurkers to become lovely new friends of ours, or</li>
<li>Someone clicked the toggle by mistake lol oops sorry!</li>
</ol>
<p class="text-muted text-justify mb-1" style="line-height: 1.2em">
But thats all fine. Signing up is easy. It takes literally like 4 seconds if youre slow. You dont even need an email! Just pick a username, make up some neat new password where you replace all the es with 3s or whatever and bam, done, youre in.<br>
Remember to click “Follow” on my profile!
</p>
<p class="text-muted mb-md-2">
I love you.<br>
<em>xoxo carp</em> 💋
</p>
<hr>
{% elif SITE_NAME == 'WPD' and site_settings['login_required'] %}
<p class="text-muted text-justify mb-1" style="line-height: 1.2em">
<strong>Hi you!</strong> &mdash; <span style="font-variant-caps: small-caps;">watchpeopledie.tv</span> is currently doing our monthly 24(ish) hours of "everyone needs to have an account" &mdash; sorry about that! But making an account is actually super easy. <strong>You don't even need an email address!</strong> Literally just pick a username, set a password, and that's that. Bam, done, like 8 seconds, tops.<br>
</p>
<p class="text-muted mb-md-2">
We WANT you with us &#128150;<br>
Please join!
</p>
<hr>
{% else %}
<h2>Create your account.</h2>
<p class="text-muted mb-md-2">No email address required.</p>
{% endif %}
<form action="/signup" method="post" class="mt-md-3" id="signup">
{% if error %}<div class="text-danger mb-2">{{error}}</div>{% endif %}
<input type="hidden" name="formkey" value="{{formkey}}">
<input type="hidden" name="now" value="{{now}}">
{% if redirect %}<input type="hidden" name="redirect" value="{{redirect}}">{% endif %}
{% if ref_user %}
<input type="hidden" name="referred_by" value="{{ref_user.id}}">{% endif %}
<label for="username-register" class="mt-3">Username</label>
<input autocomplete="off" class="form-control" id="username-register"
aria-describedby="usernameHelpRegister" type="text" name="username" pattern="[a-zA-Z0-9_\-]{3,25}" min="3" max="25" required="">
<small id="usernameHelpRegister"></small>
<label for="email-register" class="mt-3">Email Address</label>
<small class="d-inline-block text-muted ml-1">(optional)</small>
<input style="background-color: var(--gray-800)" autocomplete="off" class="form-control" id="email-register"
aria-describedby="emailHelpRegister" type="email" pattern='{{EMAIL_REGEX_PATTERN}}' name="email" readonly onfocus="if (this.hasAttribute('readonly')) {this.removeAttribute('readonly');this.blur();this.focus()}">
<label for="password-register" class="mt-3">Password</label>
<input autocomplete="off" class="form-control" id="password-register"
aria-describedby="passwordHelpReigster" type="password" name="password" required="">
<small id="passwordHelpRegister" class="form-text font-weight-bold text-muted d-none mt-1">Minimum of 8
characters
required.</small>
<small id="passwordHelpSuccess" class="form-text font-weight-bold text-success d-none mt-1">Your password meets the requirements.
</small>
<label for="password_confirm" class="mt-3">Confirm Password</label>
<input autocomplete="off" class="form-control" id="password_confirm"
aria-describedby="passwordConfirmHelp" type="password" name="password_confirm"
required="">
<div class="custom-control custom-checkbox mt-4">
<input autocomplete="off" type="checkbox" class="custom-control-input" id="termsCheck" required>
<label class="custom-control-label terms" for="termsCheck">I accept the <a href="/sidebar">rules</a></label>
</div>
{% if turnstile != DEFAULT_CONFIG_VALUE %}
<div class="cf-turnstile" data-sitekey="{{turnstile}}" data-theme="dark"></div>
{% endif %}
<button type="submit" class="btn btn-primary login w-100 mt-3" id="register_button">Register</button>
<div class="text-center text-muted text-small mt-5 mb-3">
Already have an account? <a href="/login{{'?redirect='+redirect if redirect else ''}}" class="font-weight-bold toggle-login">Log in</a>
</div>
</form>
</div>
</div>
</div>
</div>
<div class="col-12 col-md-6 d-mob-none">
<div class="splash-wrapper">
<div class="splash-overlay"></div>
<img alt="cover" loading="lazy" class="splash-img" src="{{'cover.webp' | asset_siteimg}}"></img>
</div>
</div>
</div>
</div>
<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 %}
</body>
</html>

View File

@ -1,55 +0,0 @@
{%- import 'util/macros.html' as macros with context -%}
{%- import 'html_head.html' as html_head with context -%}
<!DOCTYPE html>
<html lang="en">
{{html_head.html_head(true, false, false, none, "Sign Up: Error", false)}}
<body id="login">
<div class="container-fluid position-absolute h-100 p-0">
<div class="row no-gutters h-100">
<div class="col-12 col-md-6 my-auto p-3">
<div class="row justify-content-center">
<div class="col-10 col-md-7">
<div id="register-form">
<h4 class=" font-weight-normal text-center">Whoops! You can't refer yourself!</h4>
<p class="text-center text-muted mb-md-5">Send this link to a friend instead :)</p>
<label>Referral code</label>
<input autocomplete="off" type="text" class="form-control copy-link" readonly value="{{SITE_FULL}}/signup?ref={{request.values.get('ref')}}" data-clipboard-text="{{SITE_FULL}}/signup?ref={{request.values.get('ref')}}">
<div class="text-center text-muted text-small mt-5 mb-3">
Already have an account? <a href="/login{{'?redirect='+redirect if redirect else ''}}" class="font-weight-bold toggle-login">Log in</a>
</div>
</div>
</div>
</div>
<div class="col-12 col-md-6 d-mob-none">
<div class="splash-wrapper">
<div class="splash-overlay"></div>
<img alt="cover" loading="lazy" class="splash-img" src="{{'cover.webp' | asset_siteimg}}"></img>
</div>
</div>
</div>
</div>
<div class="toast clipboard" id="toast-success" role="alert" aria-live="assertive" aria-atomic="true" 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>
</body>
</html>

View File

@ -1,5 +1,5 @@
{% extends "default.html" %}
{% block pagetitle %}{{SITE_NAME}}{% endblock %}
{% 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">

View File

@ -1,4 +1,5 @@
{% extends "default.html" %}
{% block pagetitle %}/h/{{sub}} {{verb | capitalize}}{% endblock %}
{% block content %}
<h5 class="mt-3">Users {{verb}} /h/{{sub}}</h5>
<div class="overflow-x-auto mt-1"><table class="table table-striped mb-5">

View File

@ -1,4 +1,5 @@
{% extends "default.html" %}
{% block pagetitle %}/h/{{sub}} Exiles{% endblock %}
{% block content %}
<h5 class="my-4 ml-2">Users exiled from /h/{{sub}}</h5>
<div class="overflow-x-auto"><table class="table table-striped mb-5">

View File

@ -1,4 +1,5 @@
{% extends "default.html" %}
{% block pagetitle %}/h/{{sub}} Mods{% endblock %}
{% block content %}
<script>

View File

@ -1,9 +1,6 @@
{% extends "default.html" %}
{% block pagetitle %}Edit {{SITE_NAME}} sidebar{% endblock %}
{% block pagetitle %}/h/{{sub}} Settings{% endblock %}
{% block content %}
{% if error %}
<div class="alert alert-danger alert-dismissible fade show mb-3 mt-4" role="alert">
<i class="fas fa-exclamation-circle my-auto"></i>

View File

@ -1,4 +1,5 @@
{% extends "default.html" %}
{% block pagetitle %}{{HOLE_NAME|capitalize}} List{% endblock %}
{% block content %}
<h5 class="mt-3 mb-1">{{HOLE_NAME|capitalize}} List</h5>
<div class="overflow-x-auto">

View File

@ -1,18 +1,13 @@
{% extends "default.html" %}
{% set ups=p.upvotes %}
{% set downs=p.downvotes %}
{% set score=ups-downs %}
{% if v %}
{% set voted=p.voted if p.voted else 0 %}
{% block pagetitle %}
{% if comment_info %}
@{{comment_info.author_name}} comments on '{{p.plaintitle(v)}}'
{% else %}
{% set voted=-2 %}
{{p.plaintitle(v)}}
{% 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 title %}
{% endblock %}
{% block pagetype %}thread{% endblock %}
{% block head_final %}
<style>
body > .container {
padding-left: 20px !important;
@ -25,9 +20,17 @@
{% include "awards_PCM.html" %}
{% endif %}
{% endblock %}
{% set ups=p.upvotes %}
{% set downs=p.downvotes %}
{% set score=ups-downs %}
{% block pagetype %}thread{% endblock %}
{% if v %}
{% set voted=p.voted if p.voted else 0 %}
{% else %}
{% set voted=-2 %}
{% 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 %}

View File

@ -1,32 +1,24 @@
{%- import 'util/macros.html' as macros with context -%}
{%- import 'html_head.html' as html_head with context -%}
<!DOCTYPE html>
<html lang="en">
{{html_head.html_head(true, false, true, none, "Create a Post", false)}}
<body id="submit" {% if SITE_NAME == 'rDrama' and v and (v.is_banned or v.agendaposter) %}style="overflow-x: hidden;background:url(/assets/images/backgrounds/anime/1.webp?v=3) center center fixed; background-color: var(--background)"{% elif v and v.background %}style="overflow-x: hidden; background:url(/assets/images/backgrounds/{{v.background}}?v=3) center center fixed; background-color: var(--background)display: block{% if 'anime' not in v.background %};background-size: cover{% endif %}"{% endif %}>
{% include "header.html" %}
{%- extends 'default.html' -%}
{% block pagetitle %}Create a Post{% endblock %}
{% block pagetype %}submit{% endblock %}
{% block template_config %}
{% set root_scope.js = true %}
{% set root_scope.include_user_css = true %}
{% set root_scope.include_seo = false %}
{% set root_scope.include_cf_2fa_verify = false %}
{% endblock %}
{% block banner %}{% endblock %}
{% block content %}
{% block form %}
<div class="submit-grid-view">
<form id="submitform" action="{% if sub %}/h/{{sub}}{% endif %}/submit" method="post" enctype="multipart/form-data" style="grid-column: 2">
<div class="container">
<div class="row justify-content-center mb-5">
<div class="col p-3 py-md-0">
<h2 class="mt-3">Create a post</h2>
<div class="body">
<input type="hidden" name="formkey" value="{{v|formkey}}">
<label class='mt-4' for="title">{{HOLE_NAME|capitalize}}</label>
<div class="input-group mb2">
{%- set hole_placeholder = 'Required' if HOLE_REQUIRED else 'Optional' -%}
<input list="subs" autocomplete="off" id='sub' class="form-control" form="submitform" name="sub" oninput="savetext()" {% if sub %}value="{{sub}}"{% endif %} placeholder="{{hole_placeholder}}">
@ -35,16 +27,10 @@
<option value="{{s}}"></option>
{% endfor %}
</datalist>
</div>
<label class='mt-4' for="title">Post Title</label>
<input autocomplete="off" class="form-control allow-emojis" id="post-title" aria-describedby="titleHelpRegister" type="text" name="title" placeholder="Required" value="{{title}}" minlength="1" maxlength="500" required oninput="checkForRequired();savetext()">
<div onclick="loadEmojis('post-title')" class="btn btn-secondary format d-inline-block m-0" id="emoji-reply-btn-2" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Add Emoji"><i class="fas fa-smile-beam"></i></div>
<div id="urlblock">
<label for="URL" class="mt-3">URL</label>
<input autocomplete="off" class="form-control" id="post-url" aria-describedby="URLHelp" name="url" type="url" placeholder="Optional if you have text." value="{{request.values.get('url','')}}" required oninput="checkForRequired();hide_image();savetext();checkRepost(){% if SITE_NAME != 'PCM' %};autoSuggestTitle(){% endif %}">
@ -62,44 +48,32 @@
<small class="form-text text-muted">You can upload images, videos, or audio.</small>
</div>
</div>
<label for="body" class="mt-3">Text<i class="fas fa-info-circle text-gray-400 ml-1" data-bs-toggle="tooltip" data-bs-placement="top" title="Uses markdown. Limited to 20000 characters."></i></label>
<textarea form="submitform" id="post-text" class="form-control rounded" aria-label="With textarea" placeholder="Optional if you have a link or an image." rows="7" name="body" data-preview="preview" oninput="markdown(this);charLimit('post-text','character-count-submit-text-form');checkForRequired();savetext()" {% if v.longpost %}minlength="280"{% endif %} maxlength="{% if v.bird %}140{% else %}20000{% endif %}" required></textarea>
<div class="ghostdiv" style="display:none;"></div>
<div class="text-small font-weight-bold mt-1" id="character-count-submit-text-form" style="right: 1rem; bottom: 0.5rem; z-index: 3;"></div>
<p></p>
<div class="btn btn-secondary fl-r" onclick="document.getElementById('preview').classList.toggle('d-none');">
Toggle preview
</div>
<small class="btn btn-secondary format d-inline-block m-0"><span class="font-weight-bolder text-uppercase" aria-hidden="true" onclick="getGif();commentForm('post-text')" data-bs-toggle="modal" data-bs-target="#gifModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Add GIF">GIF</span></small>
&nbsp;
<div onclick="loadEmojis('post-text')" class="btn btn-secondary format d-inline-block m-0" id="emoji-reply-btn" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Add Emoji"><i class="fas fa-smile-beam"></i></div>
<div onclick="loadEmojis('post-text')" class="btn btn-secondary format d-inline-block m-0" id="emoji-reply-btn" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Add Emoji"><i class="fas fa-smile-beam"></i></div>
<label class="format btn btn-secondary m-0 ml-1 {% if v %}d-inline-block{% else %}d-none{% endif %}" for="file-upload-submit">
<div id="filename-show-submit"><i class="fas fa-file"></i></div>
<input autocomplete="off" id="file-upload-submit" multiple="multiple" accept="image/*, video/*, audio/*" type="file" name="file" {% if g.is_tor %}disabled{% endif %} onchange="changename('filename-show-submit','file-upload-submit');checkForRequired()" hidden>
</label>
<div id="preview" class="preview my-3"></div>
<div class="form-text text-small my-1"><a href="/formatting" {% if v and v.newtab %}target="_blank"{% endif %}>Formatting help</a></div>
<div class="custom-control custom-checkbox">
<input autocomplete="off" type="checkbox" class="custom-control-input" id="post-notify" name="notify" onchange="savetext()" checked>
<input type="hidden" name="notify" value="off">
<label class="custom-control-label" for="post-notify">Notify followers</label>
</div>
<div class="custom-control custom-checkbox">
<input autocomplete="off" type="checkbox" class="custom-control-input" id="post-new" name="new" onchange="savetext()">
<label class="custom-control-label" for="post-new">Make the default comment sorting "new"</label>
</div>
<div class="custom-control custom-checkbox">
<input autocomplete="off" type="checkbox" class="custom-control-input" id="post-nsfw" name="over_18" onchange="savetext()">
<label class="custom-control-label" for="post-nsfw">+18</label>
@ -108,14 +82,12 @@
<input autocomplete="off" type="checkbox" class="custom-control-input" id="post-private" name="private" onchange="savetext()">
<label class="custom-control-label" for="post-private">Draft</label>
</div>
{% if FEATURES['COUNTRY_CLUB'] -%}
<div class="custom-control custom-checkbox">
<input autocomplete="off" type="checkbox" class="custom-control-input" id="post-club" name="club" onchange="savetext()">
<label class="custom-control-label" for="post-club">{{CC_TITLE}} thread {% if DUES <= 0 %}(hides threads from logged-out users){% endif %}</label>
</div>
{%- endif %}
<div class="custom-control custom-checkbox mb-5">
{% if v.can_post_in_ghost_threads %}
<input onchange='ghost_toggle(this)' autocomplete="off" type="checkbox" class="custom-control-input" id="post-ghost" name="ghost">
@ -123,11 +95,8 @@
{% endif %}
</div>
</div>
</div>
</div>
<div class="container">
<div class="row fixed-bottom bg-white border-top p-3" id="" style="z-index: 100; bottom: 0px; transition: bottom 220ms cubic-bezier(0, 0, 0.2, 1) 0s;">
<div class="col">
@ -139,25 +108,18 @@
</div>
</div>
</div>
</form>
</div>
{% endblock %}
{% if request.path == '/submit' %}
<script>
let sub = document.getElementById('sub')
if (sub) sub.value = localStorage.getItem("sub")
</script>
{% endif %}
<script defer src="{{'js/vendor/marked.js' | asset}}"></script>
<script defer src="{{'js/markdown.js' | asset}}"></script>
<script defer src="{{'js/submit.js' | asset}}"></script>
{% include "modals/emoji.html" %}
{% include "modals/gif.html" %}
</body>
</html>
{% endblock %}

View File

@ -1,22 +1,17 @@
{% extends "default.html" %}
{% block pagetitle %}Transfers{% endblock %}
{% block pagetype %}transfers{% endblock %}
{% block PseudoSubmitForm %}{% endblock %}
{% block sortnav %}{% endblock %}
{% block content %}
<div class="row no-gutters {% if listing %}mt-md-3{% elif not listing %}my-md-3{% endif %} mt-1">
<div class="col-12 px-3">
<div class="posts" id="posts">
{% include "comments.html" %}
</div>
</div>
</div>
{% endblock %}
{% block pagenav %}
<nav aria-label="Page navigation">
<ul class="pagination pagination-sm mb-0">
@ -36,12 +31,10 @@
{% endif %}
</ul>
</nav>
<div class="toast clipboard" id="toast-success" role="alert" aria-live="assertive" aria-atomic="true" 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>
{% endblock %}

View File

@ -1,7 +1,30 @@
{% extends "mine.html" %}
{% block maincontent %}
{% extends "default.html" %}
{% block pagetitle %}{{user_cards_title}}{% endblock %}
{% block PseudoSubmitForm %}{% endblock %}
{% block customPadding %}{% endblock %}
{% block content %}
<div class="row mt-3 p-md-4">
{% include "user_listing.html" %}
</div>
{% endblock %}
{% block navbar %}{% endblock %}
{% block pagenav %}
<nav aria-label="Page navigation">
<ul class="pagination pagination-sm mb-0">
{% if page>1 %}
<li class="page-item">
<small><a class="page-link" href="?kind={{kind}}&page={{page-1}}" tabindex="-1">Prev</a></small>
</li>
{% else %}
<li class="page-item disabled"><span class="page-link">Prev</span></li>
{% endif %}
{% if next_exists %}
<li class="page-item">
<small><a class="page-link" href="?kind={{kind}}&page={{page+1}}">Next</a></small>
</li>
{% else %}
<li class="page-item disabled"><span class="page-link">Next</span></li>
{% endif %}
</ul>
</nav>
{% endblock %}
{% block navbar %}{% endblock %}

View File

@ -1,4 +1,3 @@
{% for u in users %}
<div class="col-12 col-sm-6 col-md-6 col-lg-4 col-xl-3 mb-4">
<div id="user-{{u.id}}" class="card h-100">

View File

@ -1,8 +1,6 @@
{% extends "default.html" %}
{% block pagetype %}userpage{% endblock %}
{% block pagetitle %}@{{u.username}}'s profile{% endblock %}
{% block head_final %}
{% if u and u.profilecss and not request.values.get('nocss') %}
<link rel="stylesheet" href="/{{u.id}}/profilecss">
@ -606,5 +604,4 @@
{% endblock %}
{% block GIFpicker %}
{% endblock %}
{% block GIFpicker %}{% endblock %}

View File

@ -1,4 +1,5 @@
{% extends "default.html" %}
{% block pagetitle %}@{{u.username}}'s blockers{% endblock %}
{% block content %}
<h5 class="mt-3">@{{u.username}}'s blockers</h5>
<div class="overflow-x-auto mt-1"><table class="table table-striped mb-5">

View File

@ -1,13 +1,8 @@
{% extends "default.html" %}
{% block pagetype %}userpage{% endblock %}
{% block title %}
<title>{{u.username}}</title>
{% endblock %}
{% block pagetitle %}@{{u.username}}{% endblock %}
{% block content %}
<div class="row no-gutters">
<div class="col-12">
<div class="text-center py-7 py-md-8">
@ -22,6 +17,4 @@
</div>
</div>
{% endblock %}
{% block pagenav %}
{% endblock %}
{% block pagenav %}{% endblock %}

View File

@ -1,4 +1,5 @@
{% extends "default.html" %}
{% block pagetitle %}@{{u.username}}'s followers{% endblock %}
{% block content %}
<h5 class="mt-2">@{{u.username}}'s followers</h5>
<div class="overflow-x-auto mt-1"><table class="table table-striped mb-5">

View File

@ -1,4 +1,5 @@
{% extends "default.html" %}
{% block pagetitle %}Users followed by @{{u.username}}{% endblock %}
{% block content %}
<h5 class="mt-3 mb-1">Users followed by @{{u.username}}</h5>
<div class="overflow-x-auto"><table class="table table-striped mb-5">

View File

@ -1,4 +1,5 @@
{% extends "default.html" %}
{% block pagetitle %}Profile Viewers{% endblock %}
{% block content %}
<h5 class="pt-4 pl-2 my-1">Users who viewed your profile</h5>
<div class="overflow-x-auto"><table class="table table-striped mb-5">

View File

@ -1,4 +1,5 @@
{% extends "default.html" %}
{% block pagetitle %}{{name2}}{% endblock %}
{% block content %}
<h3 class="mt-3" style="text-align: center">{{name2}}</h3>
<h5 class="font-weight-bold text-center mt-3">Total: {{total}}</h5>

View File

@ -1,15 +1,3 @@
{% macro html_head(js, include_seo, include_user_css, csp, title, include_2fa_verify) %}
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Security-Policy" content="{{csp | default(CONTENT_SECURITY_POLICY_DEFAULT, true) | safe}}">
{{ page_meta(title) }}
{{ stylesheets(include_user_css) }}
{{ javascript() if js}}
{{ seo() if include_seo }}
{{ cf_2fa_verify() if include_2fa_verify }}
</head>
{% endmacro %}
{% macro cf_2fa_verify() %}
{% if SITE == 'rdrama.net' %}
<meta name="cf-2fa-verify" content="4f40ca1ca249313">
@ -25,8 +13,7 @@
<script defer src="{{'js/core.js' | asset}}"></script>
{% endmacro %}
{% macro page_meta(title=SITE_NAME) %}
{% macro page_meta(title=none) %}
{% if 'post/' in request.path and p %}
{% set title = [p.plaintitle(v), ' - ', title] | join %}
@ -52,32 +39,30 @@
'@'+u.username,
u.created_date,
u.url,
[u.username, "'s profile - ", SITE_NAME] | join,
u.username + "'s profile",
u.banner_url,
[u.username, "'s profile - ", SITE_NAME] | join %}
u.username + "'s profile" %}
{% set description %}
"{{u.coins}} coins - Joined {{u.created_date}} -
{% if u.stored_subscriber_count >=1 and not u.is_private %}
{{u.coins}} coins - Joined {{u.created_date}} -
{%- if u.stored_subscriber_count >=1 and not u.is_private -%}
{{u.stored_subscriber_count}} Followers -
{% endif %}
{% if not u.is_private %}
{%- endif -%}
{%- if not u.is_private -%}
{{0 if u.shadowbanned else u.post_count}}
Posts -
{{0 if u.shadowbanned else u.comment_count}}
Comments
{% endif %}
{%- endif -%}
{% if u.bio %}
- {{u.bio}}
{% endif %}"
{% endif %}
{% endset %}
{% elif sub %}
{% set title, description =
'/h/'+sub.name, sub.sidebar if sub.sidebar %}
{% endif %}
<title>{{title}}</title>
<link rel="icon" type="image/webp" href="{{'icon.webp' | asset_siteimg}}">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="thumbnail" content="{{'site_preview.webp' | asset_siteimg}}">
@ -93,8 +78,8 @@
{% if not comment_info %}
<meta property="og:image" content="{{image | default('site_preview.webp' | asset_siteimg)}}">
<meta property="og:video" content="{{video}}">
<meta property="og:audio" content="{{audio}}">
{% if video %}<meta property="og:video" content="{{video}}">{% endif %}
{% if audio %}<meta property="og:audio" content="{{audio}}">{% endif %}
<meta name="twitter:image" content="{{image | default('site_preview.webp' | asset_siteimg)}}">
{% endif %}
@ -184,129 +169,10 @@
<meta name="msapplication-config" content="/assets/browserconfig.xml?v=3009">
<meta name="theme-color" content="#{% if v %}{{v.themecolor}}{% else %}{{DEFAULT_COLOR}}{% endif %}">
<link
rel="apple-touch-startup-image"
sizes="320x480"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="640x960"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-icon"
sizes="640x1136"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-icon"
sizes="750x1334"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="768x1004"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="768x1024"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="828x1792"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="1024x748"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="1024x768"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="1125x2436"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="1242x2208"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="1242x2688"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="1334x750"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="1536x2008"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="1536x2048"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="1668x2224"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="1792x828"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="2048x1496"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="2048x1536"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="2048x2732"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="2208x1242"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="2224x1668"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="2436x1125"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="2668x1242"
href="{{'icon.webp' | asset_siteimg}}"
>
<link
rel="apple-touch-startup-image"
sizes="2737x2048"
href="{{'icon.webp' | asset_siteimg}}"
>
{% for size in ('320x480', '640x960', '640x1136', '750x1334', '768x1004', '828x1792',
'1024x748', '1024x768', '1125x2436', '1242x2208', '1356x2048',
'1668x2224', '1792x828', '2048x1496', '2048x2732', '2208x1242',
'2224x1668', '2436x1125', '2668x1242', '2737x2048') %}
<link rel="apple-touch-startup-image" sizes="{{size}}" href="{{'icon.webp' | asset_siteimg}}">
{% endfor %}
{% endmacro %}

View File

@ -1,5 +1,5 @@
{% extends "default.html" %}
{% block pagetitle %}{{SITE_NAME}}{% endblock %}
{% block pagetitle %}Votes on {{thing.shortlink}}{% endblock %}
{% block content %}
{% if thing %}
<h1 class="mt-2">Info</h1>