[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
parent
3724edbd47
commit
153fb4e2a2
|
@ -619,6 +619,7 @@ def users_list(v):
|
|||
users=users,
|
||||
next_exists=next_exists,
|
||||
page=page,
|
||||
user_cards_title="Users Feed",
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -129,4 +129,5 @@ def hat_owners(v, hat_id):
|
|||
users=users,
|
||||
next_exists=next_exists,
|
||||
page=page,
|
||||
user_cards_title="Hat Owners",
|
||||
)
|
||||
|
|
|
@ -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.")
|
||||
|
|
|
@ -1052,6 +1052,7 @@ def bid_list(v, bid):
|
|||
users=users,
|
||||
next_exists=next_exists,
|
||||
page=page,
|
||||
user_cards_title="Badge Owners",
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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}}">
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
{% extends "default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>Banned Domains</title>
|
||||
{% endblock %}
|
||||
{% block pagetitle %}Banned Domains{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{% extends "settings2.html" %}
|
||||
|
||||
{% block pagetitle %}Shadowbanned Users{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
<div class="overflow-x-auto">
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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 = [
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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 %}
|
|
@ -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">
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
{% block pagetitle %}Hats{% endblock %}
|
||||
{% block pagetype %}message{% endblock %}
|
||||
|
||||
{% block Banner %}
|
||||
{% block banner %}
|
||||
<style>
|
||||
.shop-tabs {
|
||||
padding-top: 50px;
|
||||
|
|
|
@ -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 %}
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{% extends "default.html" %}
|
||||
|
||||
{% block pagetitle %}All Comments{% endblock %}
|
||||
{% block PseudoSubmitForm %}{% endblock %}
|
||||
{% block sortnav %}{% endblock %}
|
||||
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
{% extends "default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>{{SITE_NAME}} - Live</title>
|
||||
{% endblock %}
|
||||
|
||||
{% block pagetitle %}Live{% endblock %}
|
||||
{% block content %}
|
||||
<style>
|
||||
tr:hover {
|
||||
|
|
|
@ -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">×</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>
|
|
@ -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">
|
||||
{%- 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>
|
||||
</div>
|
||||
{% block scripts %}{% endblock %}
|
||||
{% endblock %}
|
|
@ -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 %}
|
|
@ -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">×</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 %}
|
|
@ -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">×</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 %}
|
|
@ -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 %}
|
|
@ -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 %}
|
|
@ -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 it’s your favorite user Carp! We’re 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>It’s 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 that’s all fine. Signing up is easy. It takes literally like 4 seconds if you’re slow. You don’t even need an email! Just pick a username, make up some neat new password where you replace all the e’s with 3s or whatever and bam, done, you’re 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> — <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" — 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 💖<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 %}
|
|
@ -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 %}
|
|
@ -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">×</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>
|
|
@ -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 %}
|
|
@ -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 %}
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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 = [] -%}
|
||||
|
|
|
@ -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">
|
||||
|
||||
|
|
|
@ -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 %}
|
|
@ -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>
|
|
@ -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>
|
|
@ -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 %}
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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 %}
|
|
@ -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 <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>
|
|
@ -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 %}
|
||||
|
|
|
@ -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 %}
|
|
@ -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 %}
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
-%}
|
||||
{% block pagetitle %}Shop{% endblock %}
|
||||
{% block pagetype %}message{% endblock %}
|
||||
{% block Banner %}
|
||||
{% block banner %}
|
||||
<style>
|
||||
.shop-tabs {
|
||||
padding-top: 50px;
|
||||
|
|
|
@ -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 it’s your favorite user Carp! We’re 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>It’s 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 that’s all fine. Signing up is easy. It takes literally like 4 seconds if you’re slow. You don’t even need an email! Just pick a username, make up some neat new password where you replace all the e’s with 3s or whatever and bam, done, you’re 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> — <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" — 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 💖<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>
|
|
@ -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>
|
|
@ -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">
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
{% extends "default.html" %}
|
||||
{% block pagetitle %}/h/{{sub}} Mods{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
<script>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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>
|
||||
|
||||
<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 %}
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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 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 %}
|
|
@ -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">
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 %}
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue