Merge branch 'master' into mistletoe
commit
2670e1cad1
|
@ -3,7 +3,7 @@ from flask import g
|
|||
|
||||
|
||||
def get_id(username, v=None, graceful=False):
|
||||
|
||||
|
||||
username = username.replace('\\', '')
|
||||
username = username.replace('_', '\_')
|
||||
username = username.replace('%', '')
|
||||
|
@ -28,6 +28,10 @@ def get_id(username, v=None, graceful=False):
|
|||
|
||||
def get_user(username, v=None, graceful=False):
|
||||
|
||||
if not username:
|
||||
if not graceful: abort(404)
|
||||
else: return None
|
||||
|
||||
username = username.replace('\\', '')
|
||||
username = username.replace('_', '\_')
|
||||
username = username.replace('%', '')
|
||||
|
@ -42,10 +46,8 @@ def get_user(username, v=None, graceful=False):
|
|||
).first()
|
||||
|
||||
if not user:
|
||||
if not graceful:
|
||||
abort(404)
|
||||
else:
|
||||
return None
|
||||
if not graceful: abort(404)
|
||||
else: return None
|
||||
|
||||
if v:
|
||||
block = g.db.query(UserBlock).filter(
|
||||
|
|
|
@ -84,7 +84,7 @@ def is_not_banned(f):
|
|||
|
||||
check_ban_evade(v)
|
||||
|
||||
if v.is_suspended: abort(403)
|
||||
if v.is_suspended: return {"error": "You can't perform this action while being banned."}, 403
|
||||
|
||||
g.v = v
|
||||
|
||||
|
|
|
@ -546,13 +546,15 @@ def award_post(pid, v):
|
|||
elif kind == "pause":
|
||||
author.mute = True
|
||||
send_notification(CARP_ID, f"@{v.username} used {kind} award!")
|
||||
new_badge = Badge(badge_id=68, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
if not author.has_badge(68):
|
||||
new_badge = Badge(badge_id=68, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
elif kind == "unpausable":
|
||||
author.unmutable = True
|
||||
send_notification(CARP_ID, f"@{v.username} used {kind} award!")
|
||||
new_badge = Badge(badge_id=67, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
if not author.has_badge(67):
|
||||
new_badge = Badge(badge_id=67, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
elif kind == "marsey":
|
||||
if author.marseyawarded: author.marseyawarded += 86400
|
||||
else: author.marseyawarded = time.time() + 86400
|
||||
|
@ -570,18 +572,21 @@ def award_post(pid, v):
|
|||
elif kind == "eye":
|
||||
author.eye = True
|
||||
send_notification(CARP_ID, f"@{v.username} used {kind} award!")
|
||||
new_badge = Badge(badge_id=83, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
if not author.has_badge(83):
|
||||
new_badge = Badge(badge_id=83, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
elif kind == "alt":
|
||||
author.alt = True
|
||||
send_notification(CARP_ID, f"@{v.username} used {kind} award!")
|
||||
new_badge = Badge(badge_id=84, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
if not author.has_badge(84):
|
||||
new_badge = Badge(badge_id=84, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
elif kind == "unblockable":
|
||||
author.unblockable = True
|
||||
send_notification(CARP_ID, f"@{v.username} used {kind} award!")
|
||||
new_badge = Badge(badge_id=87, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
if not author.has_badge(87):
|
||||
new_badge = Badge(badge_id=87, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
for block in g.db.query(UserBlock).filter_by(target_id=author.id).all(): g.db.delete(block)
|
||||
|
||||
post.author.received_award_count += 1
|
||||
|
@ -693,13 +698,15 @@ def award_comment(cid, v):
|
|||
elif kind == "pause":
|
||||
author.mute = True
|
||||
send_notification(CARP_ID, f"@{v.username} used {kind} award!")
|
||||
new_badge = Badge(badge_id=68, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
if not author.has_badge(68):
|
||||
new_badge = Badge(badge_id=68, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
elif kind == "unpausable":
|
||||
author.unmutable = True
|
||||
send_notification(CARP_ID, f"@{v.username} used {kind} award!")
|
||||
new_badge = Badge(badge_id=67, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
if not author.has_badge(67):
|
||||
new_badge = Badge(badge_id=67, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
elif kind == "marsey":
|
||||
if author.marseyawarded: author.marseyawarded += 86400
|
||||
else: author.marseyawarded = time.time() + 86400
|
||||
|
@ -717,18 +724,21 @@ def award_comment(cid, v):
|
|||
elif kind == "eye":
|
||||
author.eye = True
|
||||
send_notification(CARP_ID, f"@{v.username} used {kind} award!")
|
||||
new_badge = Badge(badge_id=83, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
if not author.has_badge(83):
|
||||
new_badge = Badge(badge_id=83, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
elif kind == "alt":
|
||||
author.alt = True
|
||||
send_notification(CARP_ID, f"@{v.username} used {kind} award!")
|
||||
new_badge = Badge(badge_id=84, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
if not author.has_badge(84):
|
||||
new_badge = Badge(badge_id=84, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
elif kind == "unblockable":
|
||||
author.unblockable = True
|
||||
send_notification(CARP_ID, f"@{v.username} used {kind} award!")
|
||||
new_badge = Badge(badge_id=87, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
if not author.has_badge(87):
|
||||
new_badge = Badge(badge_id=87, user_id=author.id)
|
||||
g.db.add(new_badge)
|
||||
for block in g.db.query(UserBlock).filter_by(target_id=author.id).all(): g.db.delete(block)
|
||||
|
||||
c.author.received_award_count += 1
|
||||
|
|
|
@ -221,6 +221,9 @@ def post_id(pid, anything=None, v=None):
|
|||
@auth_required
|
||||
@validate_formkey
|
||||
def edit_post(pid, v):
|
||||
if v and v.patron:
|
||||
if request.content_length > 8 * 1024 * 1024: return "Max file size is 8 MB.", 413
|
||||
elif request.content_length > 4 * 1024 * 1024: return "Max file size is 4 MB.", 413
|
||||
|
||||
p = get_post(pid)
|
||||
|
||||
|
@ -264,6 +267,16 @@ def edit_post(pid, v):
|
|||
p.title = title
|
||||
p.title_html = title_html
|
||||
|
||||
if request.files.get("file") and request.headers.get("cf-ipcountry") != "T1":
|
||||
file=request.files["file"]
|
||||
if not file.content_type.startswith('image/'): return {"error": "That wasn't an image!"}, 400
|
||||
|
||||
name = f'/images/{int(time.time())}{secrets.token_urlsafe(2)}.webp'
|
||||
file.save(name)
|
||||
url = request.host_url[:-1] + process_image(name)
|
||||
|
||||
body += f"\n\n![]({url})"
|
||||
|
||||
if body != p.body:
|
||||
for i in re.finditer('^(https:\/\/.*\.(png|jpg|jpeg|gif|webp|PNG|JPG|JPEG|GIF|WEBP|9999))', body, re.MULTILINE):
|
||||
if "wikipedia" not in i.group(1): body = body.replace(i.group(1), f'![]({i.group(1)})')
|
||||
|
@ -587,7 +600,7 @@ def submit_post(v):
|
|||
domain = parsed_url.netloc
|
||||
|
||||
qd = parse_qs(parsed_url.query)
|
||||
filtered = dict((k, v) for k, v in qd.items() if not k.startswith('utm_'))
|
||||
filtered = dict((k, v) for k, v in qd.items() if not k.startswith('utm_') and not k.startswith('ref_'))
|
||||
|
||||
new_url = ParseResult(scheme="https",
|
||||
netloc=parsed_url.netloc,
|
||||
|
@ -742,6 +755,16 @@ def submit_post(v):
|
|||
body = body.replace('I ', f'@{v.username} ')
|
||||
body = censor_slurs2(body).upper().replace(' ME ', f' @{v.username} ')
|
||||
|
||||
if request.files.get("file2") and request.headers.get("cf-ipcountry") != "T1":
|
||||
file=request.files["file2"]
|
||||
if not file.content_type.startswith('image/'): return {"error": "That wasn't an image!"}, 400
|
||||
|
||||
name = f'/images/{int(time.time())}{secrets.token_urlsafe(2)}.webp'
|
||||
file.save(name)
|
||||
url = request.host_url[:-1] + process_image(name)
|
||||
|
||||
body += f"\n\n![]({url})"
|
||||
|
||||
body_html = sanitize(CustomRenderer().render(mistletoe.Document(body)))
|
||||
|
||||
if v.marseyawarded and len(list(re.finditer('>[^<\s+]|[^>\s+]<', body_html))) > 0: return {"error":"You can only type marseys!"}, 400
|
||||
|
|
|
@ -873,6 +873,8 @@ def fp(v, fp):
|
|||
if v.username != fp:
|
||||
v.fp = fp
|
||||
users = g.db.query(User).filter(User.fp == fp, User.id != v.id).all()
|
||||
if v.email and v.is_activated:
|
||||
users += g.db.query(User).filter(User.email == email, User.is_activated, User.id != v.id).all()
|
||||
for u in users:
|
||||
li = [v.id, u.id]
|
||||
existing = g.db.query(Alt).filter(Alt.user1.in_(li), Alt.user2.in_(li)).first()
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
|
||||
{% block fixedMobileBarJS %}
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
var prevScrollpos = window.pageYOffset;
|
||||
window.onscroll = function () {
|
||||
var currentScrollPos = window.pageYOffset;
|
||||
|
@ -31,6 +32,8 @@
|
|||
}
|
||||
prevScrollpos = currentScrollPos;
|
||||
}
|
||||
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
|
||||
{% block fixedMobileBarJS %}
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
var prevScrollpos = window.pageYOffset;
|
||||
window.onscroll = function () {
|
||||
var currentScrollPos = window.pageYOffset;
|
||||
|
@ -59,6 +60,8 @@
|
|||
}
|
||||
prevScrollpos = currentScrollPos;
|
||||
}
|
||||
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
<script src="/assets/js/award_modal.js?v=57"></script>
|
||||
|
||||
<div class="modal fade" id="awardModal" tabindex="-1" role="dialog" aria-labelledby="awardModalTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-scrollable modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
|
@ -38,6 +36,8 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<script defer src="/assets/js/award_modal.js?v=57"></script>
|
||||
|
||||
<style>
|
||||
.awards-wrapper input[type="radio"] {
|
||||
display: none;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
const banModal = function(link, id, name) {
|
||||
document.getElementById("banModalTitle").innerHTML = `Ban @${name}`;
|
||||
document.getElementById("ban-modal-link").value = link;
|
||||
|
@ -22,6 +23,8 @@
|
|||
xhr.send(fd);
|
||||
}
|
||||
};
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<div class="modal fade" id="banModal" tabindex="-1" role="dialog" aria-labelledby="banModalTitle" aria-hidden="true">
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
{% block pagetitle %}Changelog{% endblock %}
|
||||
|
||||
{% block desktopBanner %}
|
||||
<script src="/assets/js/changelog.js?v=54"></script>
|
||||
|
||||
<div class="row" style="overflow: visible;padding-top:5px;">
|
||||
<div class="col">
|
||||
|
@ -105,4 +104,7 @@
|
|||
</ul>
|
||||
</nav>
|
||||
{% endif %}
|
||||
|
||||
<script defer src="/assets/js/changelog.js?v=54"></script>
|
||||
|
||||
{% endblock %}
|
|
@ -1,6 +1,9 @@
|
|||
{{p.embed_url | safe}}
|
||||
<script src="/assets/js/twitter.js" charset="utf-8">
|
||||
<script defer src="/assets/js/twitter.js" charset="utf-8">
|
||||
</script>
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
document.getElementById('twitter-widget-0').setAttribute('sandbox','')
|
||||
|
||||
});
|
||||
</script>
|
|
@ -1,6 +1,9 @@
|
|||
{{p.embed_url | safe}}
|
||||
<script src="https://platform.twitter.com/widgets.js" charset="utf-8">
|
||||
<script defer src="https://platform.twitter.com/widgets.js" charset="utf-8">
|
||||
</script>
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
document.getElementById('twitter-widget-0').setAttribute('sandbox','')
|
||||
|
||||
});
|
||||
</script>
|
|
@ -1,23 +1,3 @@
|
|||
<script src="/assets/js/emoji_modal.js?v=122"></script>
|
||||
|
||||
<style>
|
||||
a.emojitab {
|
||||
padding: 0.5rem 0.7rem !important;
|
||||
font-size: 13px !important;
|
||||
}
|
||||
|
||||
.emoji2 {
|
||||
background: None!important;
|
||||
width:60px;
|
||||
overflow: hidden;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.emoji2:focus {
|
||||
border: 1px solid var(--primary) !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="form" class="d-none"></div>
|
||||
<div class="modal fade" id="emojiModal" tabindex="-1" role="dialog" aria-labelledby="emojiModalTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-scrollable modal-dialog-centered p-2 py-5" role="document">
|
||||
|
@ -102,4 +82,24 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script defer src="/assets/js/emoji_modal.js?v=122"></script>
|
||||
|
||||
<style>
|
||||
a.emojitab {
|
||||
padding: 0.5rem 0.7rem !important;
|
||||
font-size: 13px !important;
|
||||
}
|
||||
|
||||
.emoji2 {
|
||||
background: None!important;
|
||||
width:60px;
|
||||
overflow: hidden;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.emoji2:focus {
|
||||
border: 1px solid var(--primary) !important;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
document.getElementById("desktop-expanded-image-link").href = image;
|
||||
document.getElementById("desktop-expanded-image-wrap-link").href=image;
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
{% extends "default.html" %}
|
||||
{% block content %}
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
function removeFollower(event, username) {
|
||||
post_toast('/remove_follow/' + username);
|
||||
let table = document.getElementById("followers-table");
|
||||
table.removeChild(event.target.parentElement.parentElement);
|
||||
}
|
||||
|
||||
});
|
||||
</script>
|
||||
<pre>
|
||||
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
{% extends "default.html" %}
|
||||
{% block content %}
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
function removeFollower(event, username) {
|
||||
post_toast('/unfollow/' + username);
|
||||
let table = document.getElementById("followers-table");
|
||||
table.removeChild(event.target.parentElement.parentElement);
|
||||
}
|
||||
|
||||
});
|
||||
</script>
|
||||
<pre>
|
||||
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
<script src="/assets/js/gif_modal.js?v=54"></script>
|
||||
|
||||
<div class="modal fade" id="gifModal" tabindex="-1" role="dialog" aria-labelledby="gifModalTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-scrollable modal-dialog-centered p-5" role="document">
|
||||
<div class="modal-content">
|
||||
|
@ -27,3 +25,5 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script defer src="/assets/js/gif_modal.js?v=54"></script>
|
||||
|
|
|
@ -1,16 +1,3 @@
|
|||
{% if v %}<script>function formkey() {return '{{v.formkey}}';}</script>{% endif %}
|
||||
<script src="/assets/js/header.js?v=54"></script>
|
||||
|
||||
<style>
|
||||
.notif-count {
|
||||
background: red;
|
||||
border-radius: 20%;
|
||||
color: white;
|
||||
padding: 2px 5px;
|
||||
font-weight: 700;
|
||||
}
|
||||
</style>
|
||||
|
||||
<nav class="shadow shadow-md fixed-top">
|
||||
{% if "rama" in request.host %}
|
||||
<div id="srd" style="width: 100%; background-color: var(--primary); padding: 2px; text-align: center; font-weight: bold;">
|
||||
|
@ -125,7 +112,7 @@
|
|||
<button class="dropdown-item copy-link" data-clipboard-text="/signup?ref={{v.username}}"><i class="fad fa-user-friends fa-fw text-left mr-3"></i>Invite friends</button>
|
||||
</div>
|
||||
<div class="px-2">
|
||||
<a class="dropdown-item" href="/assets/{{'SITE_NAME' | app_config}}_App.apk"><i class="fab fa-android fa-fw text-left mr-3"></i>Android app</a>
|
||||
<a class="dropdown-item" href="/assets/{{'SITE_NAME' | app_config}}.apk?v=2"><i class="fab fa-android fa-fw text-left mr-3"></i>Android app</a>
|
||||
|
||||
<a class="dropdown-item" href="/rules"><i class="fas fa-balance-scale fa-fw text-left mr-3"></i>Rules</a>
|
||||
|
||||
|
@ -189,7 +176,7 @@
|
|||
<li class="nav-item">
|
||||
<a class="nav-link" href="/settings"><i class="fas fa-cog fa-fw mr-3"></i>Settings</a>
|
||||
</li>
|
||||
<a class="nav-item nav-link" href="/assets/{{'SITE_NAME' | app_config}}_App.apk"><i class="fab fa-android fa-fw mr-3"></i>Android app</a>
|
||||
<a class="nav-item nav-link" href="/assets/{{'SITE_NAME' | app_config}}.apk?v=2"><i class="fab fa-android fa-fw mr-3"></i>Android app</a>
|
||||
|
||||
<a class="nav-item nav-link" href="/rules"><i class="fas fa-balance-scale fa-fw mr-3"></i>Rules</a>
|
||||
|
||||
|
@ -224,4 +211,21 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</nav>
|
||||
|
||||
{% if v %}
|
||||
<script>
|
||||
function formkey() {return '{{v.formkey}}';}
|
||||
</script>
|
||||
{% endif %}
|
||||
<script defer src="/assets/js/header.js?v=54"></script>
|
||||
|
||||
<style>
|
||||
.notif-count {
|
||||
background: red;
|
||||
border-radius: 20%;
|
||||
color: white;
|
||||
padding: 2px 5px;
|
||||
font-weight: 700;
|
||||
}
|
||||
</style>
|
|
@ -4,17 +4,6 @@
|
|||
|
||||
|
||||
{% block content %}
|
||||
<script src="https://cdn.jsdelivr.net/npm/clipboard@2.0.8/dist/clipboard.min.js"></script>
|
||||
|
||||
<script>
|
||||
var clipboard = new ClipboardJS('.copy-link');
|
||||
clipboard.on('success', function(e) {
|
||||
var myToast = new bootstrap.Toast(document.getElementById('toast-success'));
|
||||
myToast.show();
|
||||
console.log(e);
|
||||
});
|
||||
</script>
|
||||
|
||||
{% if v %}
|
||||
<style>:root{--primary:#{{v.themecolor}}}</style>
|
||||
<link rel="stylesheet" href="/assets/css/main.css?v=131"><link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=124">
|
||||
|
@ -132,4 +121,16 @@
|
|||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/clipboard@2.0.8/dist/clipboard.min.js"></script>
|
||||
|
||||
<script>
|
||||
var clipboard = new ClipboardJS('.copy-link');
|
||||
clipboard.on('success', function(e) {
|
||||
var myToast = new bootstrap.Toast(document.getElementById('toast-success'));
|
||||
myToast.show();
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
|
@ -3,7 +3,6 @@
|
|||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="description" content="Sign in to {{'SITE_NAME' | app_config}}">
|
||||
|
@ -115,6 +114,8 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
|
@ -3,10 +3,6 @@
|
|||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
<script>function formkey() {return '{{v.formkey}}';}</script>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="description" content="">
|
||||
|
@ -172,6 +168,12 @@
|
|||
{% block scripts %}
|
||||
{% endblock %}
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
<script>
|
||||
function formkey() {return '{{v.formkey}}';}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
block_user=function() {
|
||||
|
||||
var exileForm = document.getElementById("exile-form");
|
||||
|
@ -39,6 +40,8 @@
|
|||
xhr.send(f)
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<div class="row">
|
||||
|
|
|
@ -38,12 +38,15 @@
|
|||
</div>
|
||||
{% if v.agendaposter %}
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
const flip = (e) => {
|
||||
e.preventDefault();
|
||||
document.getElementsByTagName("body")[0].setAttribute("style", "-moz-transform: scale(-1, -1);-o-transform: scale(-1, -1);-webkit-transform: scale(-1, -1);transform: scale(-1, -1);");
|
||||
};
|
||||
|
||||
document.getElementById("submit-btn").onclick = flip;
|
||||
|
||||
});
|
||||
</script>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
|
|
@ -5,11 +5,14 @@
|
|||
{% block content %}
|
||||
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
document.getElementById('new_email').addEventListener('input', function () {
|
||||
document.getElementById("email-password").classList.remove("d-none");
|
||||
document.getElementById("email-password-label").classList.remove("d-none");
|
||||
document.getElementById("emailpasswordRequired").classList.remove("d-none");
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<div class="row">
|
||||
|
|
|
@ -2,14 +2,6 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
<script src="/assets/js/signup.js?v=63"></script>
|
||||
|
||||
{% if hcaptcha %}
|
||||
<script src="https://hcaptcha.com/1/api.js"></script>
|
||||
{% endif %}
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="description" content="Sign up in under 27 seconds.">
|
||||
|
@ -153,6 +145,15 @@
|
|||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
<script defer src="/assets/js/signup.js?v=63"></script>
|
||||
|
||||
{% if hcaptcha %}
|
||||
<script defer src="https://hcaptcha.com/1/api.js"></script>
|
||||
{% endif %}
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
|
@ -3,8 +3,6 @@
|
|||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="description" content="Sign up in under 27 seconds.">
|
||||
|
@ -97,6 +95,9 @@
|
|||
<i class="fas fa-check-circle text-success mr-2"></i>Link copied to clipboard
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
|
@ -1,11 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/marked@3.0.8/lib/marked.min.js"></script>
|
||||
|
||||
<script src="/assets/js/submit.js?v=72"></script>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="description" content="">
|
||||
|
@ -18,9 +13,6 @@
|
|||
{% set cc='Country Club' %}
|
||||
{% endif %}
|
||||
|
||||
{% include "emoji_modal.html" %}
|
||||
{% include "gif_modal.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>Create a post - {{'SITE_NAME' | app_config}}</title>
|
||||
{% endblock %}
|
||||
|
@ -125,7 +117,12 @@
|
|||
<label class="btn btn-secondary format d-inline-block m-0" for="emoji-reply-btn">
|
||||
<div id="emoji-reply-btn" onclick="loadEmojis('post-text')" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Add Emoji"><i class="fas fa-smile-beam"></i></div>
|
||||
</label>
|
||||
|
||||
|
||||
<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="far fa-image"></i></div>
|
||||
<input id="file-upload-submit" type="file" name="file2" accept="image/*" {% if request.headers.get('cf-ipcountry')=="T1" %}disabled{% endif %} onchange="document.getElementById('filename-show-submit').innerHTML='image';" hidden>
|
||||
</label>
|
||||
|
||||
<pre></pre>
|
||||
<div class="form-text text-small"><a href="/formatting" target="_blank">Formatting help</a></div>
|
||||
<pre></pre>
|
||||
|
@ -175,6 +172,16 @@
|
|||
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script defer src="https://cdn.jsdelivr.net/npm/marked@3.0.8/lib/marked.min.js"></script>
|
||||
|
||||
<script defer src="/assets/js/submit.js?v=72"></script>
|
||||
|
||||
|
||||
{% include "emoji_modal.html" %}
|
||||
{% include "gif_modal.html" %}
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
</html>
|
|
@ -8,14 +8,6 @@
|
|||
{% if u and u.profilecss and (u.admin_level or not (v and v.admin_level)) %}
|
||||
<link rel="stylesheet" href="/@{{u.username}}/profilecss">
|
||||
{% endif %}
|
||||
|
||||
<style>
|
||||
.wtf {
|
||||
object-fit: cover !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script src="/assets/js/userpage.js?v=72"></script>
|
||||
<title>{{u.username}}'s profile - {{'SITE_NAME' | app_config}}</title>
|
||||
{% if u.is_private %}
|
||||
<meta name="robots" content="noindex">
|
||||
|
@ -43,6 +35,7 @@
|
|||
|
||||
{% if v %}
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
const TRANSFER_TAX = {% if v.patron or u.patron %}0{% else %}0.03{% endif %};
|
||||
|
||||
function updateTax(mobile=false) {
|
||||
|
@ -74,11 +67,14 @@
|
|||
|
||||
setTimeout(_ => t.disabled = false, 2000);
|
||||
}
|
||||
</script>
|
||||
|
||||
});
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{% if u.song %}
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
var audio = new Audio('/songs/{{u.id}}');
|
||||
audio.loop=true;
|
||||
|
||||
|
@ -107,7 +103,9 @@
|
|||
}, {once : true});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
});
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
<div class="row d-none d-md-block">
|
||||
|
@ -673,10 +671,6 @@
|
|||
|
||||
{% block content %}
|
||||
|
||||
{% if v %}
|
||||
{% include "emoji_modal.html" %}
|
||||
{% endif %}
|
||||
|
||||
<div id="profilecontent" 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">
|
||||
|
@ -782,7 +776,21 @@
|
|||
</ul>
|
||||
</nav>
|
||||
{% endif %}
|
||||
|
||||
<style>
|
||||
.wtf {
|
||||
object-fit: cover !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script defer src="/assets/js/userpage.js?v=72"></script>
|
||||
|
||||
|
||||
{% if v %}
|
||||
{% include "emoji_modal.html" %}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block GIFpicker %}
|
||||
{% endblock %}
|
||||
{% endblock %}
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
{% block fixedMobileBarJS %}
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
var prevScrollpos = window.pageYOffset;
|
||||
window.onscroll = function () {
|
||||
var currentScrollPos = window.pageYOffset;
|
||||
|
@ -23,6 +24,8 @@
|
|||
}
|
||||
prevScrollpos = currentScrollPos;
|
||||
}
|
||||
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
{% block fixedMobileBarJS %}
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
var prevScrollpos = window.pageYOffset;
|
||||
window.onscroll = function () {
|
||||
var currentScrollPos = window.pageYOffset;
|
||||
|
@ -23,6 +24,8 @@
|
|||
}
|
||||
prevScrollpos = currentScrollPos;
|
||||
}
|
||||
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
{% block fixedMobileBarJS %}
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
var prevScrollpos = window.pageYOffset;
|
||||
window.onscroll = function () {
|
||||
var currentScrollPos = window.pageYOffset;
|
||||
|
@ -23,6 +24,8 @@
|
|||
}
|
||||
prevScrollpos = currentScrollPos;
|
||||
}
|
||||
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
|
|
Loading…
Reference in New Issue