forked from rDrama/rDrama
Merge branch 'master' into mistletoe
commit
2216812f04
|
@ -136,8 +136,8 @@ def teardown_request(error):
|
|||
def after_request(response):
|
||||
|
||||
response.headers.add("Strict-Transport-Security", "max-age=31536000")
|
||||
response.headers.add("Referrer-Policy", "same-origin")
|
||||
response.headers.add("X-Frame-Options", "deny")
|
||||
response.headers.add("Content-Security-Policy", "script-src 'self' 'unsafe-inline' 'unsafe-eval'; connect-src 'self' *.pusher.com; object-src 'none';")
|
||||
return response
|
||||
|
||||
|
||||
|
|
|
@ -172,16 +172,16 @@ def sanitize(sanitized, noimages=False):
|
|||
for i in re.finditer('(?<!"):([!#A-Za-z0-9]{1,30}?):', new):
|
||||
emoji = i.group(1).lower()
|
||||
if emoji.startswith("#!") or emoji.startswith("!#"):
|
||||
classes = 'class="mirrored" '
|
||||
classes = 'class="emj mirrored" '
|
||||
remoji = emoji[2:]
|
||||
elif emoji.startswith("!"):
|
||||
classes = 'height=60 class="mirrored" '
|
||||
classes = 'height=60 class="emj mirrored" '
|
||||
remoji = emoji[1:]
|
||||
elif emoji.startswith("#"):
|
||||
classes = ""
|
||||
classes = 'class="emj" '
|
||||
remoji = emoji[1:]
|
||||
else:
|
||||
classes = 'height=60 '
|
||||
classes = 'height=60 class="emj" '
|
||||
remoji = emoji
|
||||
|
||||
if path.isfile(f'./files/assets/images/emojis/{remoji}.webp'):
|
||||
|
@ -198,13 +198,13 @@ def sanitize(sanitized, noimages=False):
|
|||
if emoji.startswith("!"):
|
||||
emoji = emoji[1:]
|
||||
if path.isfile(f'./files/assets/images/emojis/{emoji}.webp'):
|
||||
sanitized = re.sub(f'(?<!"):!{emoji}:', f'<img loading="lazy" data-bs-toggle="tooltip" alt=":!{emoji}:" title=":!{emoji}:" delay="0" height=30 class="mirrored" src="https://{site}/assets/images/emojis/{emoji}.webp">', sanitized)
|
||||
sanitized = re.sub(f'(?<!"):!{emoji}:', f'<img loading="lazy" data-bs-toggle="tooltip" alt=":!{emoji}:" title=":!{emoji}:" delay="0" height=30 class="emj mirrored" src="https://{site}/assets/images/emojis/{emoji}.webp">', sanitized)
|
||||
|
||||
if emoji in session["favorite_emojis"]: session["favorite_emojis"][emoji] += 1
|
||||
else: session["favorite_emojis"][emoji] = 1
|
||||
|
||||
elif path.isfile(f'./files/assets/images/emojis/{emoji}.webp'):
|
||||
sanitized = re.sub(f'(?<!"):{emoji}:', f'<img loading="lazy" data-bs-toggle="tooltip" alt=":{emoji}:" title=":{emoji}:" delay="0" height=30 src="https://{site}/assets/images/emojis/{emoji}.webp">', sanitized)
|
||||
sanitized = re.sub(f'(?<!"):{emoji}:', f'<img loading="lazy" data-bs-toggle="tooltip" alt=":{emoji}:" title=":{emoji}:" delay="0" height=30 class="emj" src="https://{site}/assets/images/emojis/{emoji}.webp">', sanitized)
|
||||
|
||||
if emoji in session["favorite_emojis"]: session["favorite_emojis"][emoji] += 1
|
||||
else: session["favorite_emojis"][emoji] = 1
|
||||
|
@ -229,7 +229,7 @@ def sanitize(sanitized, noimages=False):
|
|||
|
||||
sanitized = sanitized.replace(replacing, htmlsource)
|
||||
for i in re.finditer('<p>(https:.*?\.mp4)</p>', sanitized):
|
||||
sanitized = sanitized.replace(i.group(0), f'<p><video controls preload="metadata" class="embedvid"><source src="{i.group(1)}" type="video/mp4"></video>')
|
||||
sanitized = sanitized.replace(i.group(0), f'<p><video controls preload="none" class="embedvid"><source src="{i.group(1)}" type="video/mp4"></video>')
|
||||
|
||||
for rd in ["https://reddit.com/", "https://new.reddit.com/", "https://www.reddit.com/", "https://redd.it/"]:
|
||||
sanitized = sanitized.replace(rd, "https://old.reddit.com/")
|
||||
|
@ -252,10 +252,10 @@ def filter_emojis_only(title):
|
|||
if emoji.startswith("!"):
|
||||
emoji = emoji[1:]
|
||||
if path.isfile(f'./files/assets/images/emojis/{emoji}.webp'):
|
||||
title = re.sub(f'(?<!"):!{emoji}:', f'<img loading="lazy" data-bs-toggle="tooltip" alt=":!{emoji}:" title=":!{emoji}:" delay="0" height=30 src="https://{site}/assets/images/emojis/{emoji}.webp" class="mirrored">', title)
|
||||
title = re.sub(f'(?<!"):!{emoji}:', f'<img loading="lazy" data-bs-toggle="tooltip" alt=":!{emoji}:" title=":!{emoji}:" delay="0" height=30 src="https://{site}/assets/images/emojis/{emoji}.webp" class="emj mirrored">', title)
|
||||
|
||||
elif path.isfile(f'./files/assets/images/emojis/{emoji}.webp'):
|
||||
title = re.sub(f'(?<!"):{emoji}:', f'<img loading="lazy" data-bs-toggle="tooltip" alt=":{emoji}:" title=":{emoji}:" delay="0" height=30 src="https://{site}/assets/images/emojis/{emoji}.webp">', title)
|
||||
title = re.sub(f'(?<!"):{emoji}:', f'<img loading="lazy" data-bs-toggle="tooltip" alt=":{emoji}:" title=":{emoji}:" delay="0" height=30 class="emj" src="https://{site}/assets/images/emojis/{emoji}.webp">', title)
|
||||
|
||||
if len(title) > 1500: abort(400)
|
||||
else: return title
|
|
@ -114,7 +114,7 @@ def post_id(pid, anything=None, v=None):
|
|||
|
||||
post = get_post(pid, v=v)
|
||||
|
||||
if post.club and not (v and (v.paid_dues or v.id == post.author_id)) or post.private and not (v and v.id == post.author_id): abort(403)
|
||||
if not (v and v.admin_level > 1) and post.club and not (v and (v.paid_dues or v.id == post.author_id)) or post.private and not (v and v.id == post.author_id): abort(403)
|
||||
|
||||
if v:
|
||||
votes = g.db.query(CommentVote).filter_by(user_id=v.id).subquery()
|
||||
|
@ -1070,7 +1070,7 @@ def submit_post(v):
|
|||
if "rama" in request.host or "pcm" in request.host:
|
||||
if v.id == CARP_ID:
|
||||
if random.random() < 0.02: body = "i love you carp"
|
||||
else: body = "![](/assets/images/emojis/fuckoffcarp.webp)"
|
||||
else: body = ":#marseyfuckoffcarp:"
|
||||
elif v.id == LAWLZ_ID:
|
||||
if random.random() < 0.5: body = "wow, this lawlzpost sucks!"
|
||||
else: body = "wow, a good lawlzpost for once!"
|
||||
|
|
|
@ -11,27 +11,6 @@
|
|||
{% block postNav %}{% endblock %}
|
||||
|
||||
{% block fixedMobileBarJS %}
|
||||
<script>
|
||||
var prevScrollpos = window.pageYOffset;
|
||||
window.onscroll = function () {
|
||||
var currentScrollPos = window.pageYOffset;
|
||||
if (prevScrollpos > currentScrollPos) {
|
||||
document.getElementById("fixed-bar-mobile").style.top = "48px";
|
||||
document.getElementById("navbar").classList.remove("shadow");
|
||||
}
|
||||
else if (currentScrollPos <= 125) {
|
||||
document.getElementById("fixed-bar-mobile").style.top = "48px";
|
||||
document.getElementById("navbar").classList.remove("shadow");
|
||||
}
|
||||
else {
|
||||
document.getElementById("fixed-bar-mobile").style.top = "-48px";
|
||||
document.getElementById("dropdownMenuSortBy").classList.remove('show');
|
||||
document.getElementById("dropdownMenuFrom").classList.remove('show');
|
||||
document.getElementById("navbar").classList.add("shadow");
|
||||
}
|
||||
prevScrollpos = currentScrollPos;
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}
|
||||
|
|
|
@ -39,27 +39,6 @@
|
|||
|
||||
|
||||
{% block fixedMobileBarJS %}
|
||||
<script>
|
||||
var prevScrollpos = window.pageYOffset;
|
||||
window.onscroll = function () {
|
||||
var currentScrollPos = window.pageYOffset;
|
||||
if (prevScrollpos > currentScrollPos) {
|
||||
document.getElementById("fixed-bar-mobile").style.top = "48px";
|
||||
document.getElementById("navbar").classList.remove("shadow");
|
||||
}
|
||||
else if (currentScrollPos <= 125) {
|
||||
document.getElementById("fixed-bar-mobile").style.top = "48px";
|
||||
document.getElementById("navbar").classList.remove("shadow");
|
||||
}
|
||||
else {
|
||||
document.getElementById("fixed-bar-mobile").style.top = "-48px";
|
||||
document.getElementById("dropdownMenuSortBy").classList.remove('show');
|
||||
document.getElementById("dropdownMenuFrom").classList.remove('show');
|
||||
document.getElementById("navbar").classList.add("shadow");
|
||||
}
|
||||
prevScrollpos = currentScrollPos;
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}
|
||||
|
|
|
@ -13,11 +13,11 @@
|
|||
|
||||
{% if v %}
|
||||
<style>:root{--primary:#{{v.themecolor}}}</style>
|
||||
<link rel="stylesheet" href="/assets/css/main.css?v=137"><link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=125">
|
||||
<link rel="stylesheet" href="/assets/css/main.css?v=139"><link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=125">
|
||||
{% if v.agendaposter %}<link rel="stylesheet" href="/assets/css/agendaposter.css?v=125">{% elif v.css %}<link rel="stylesheet" href="/@{{v.username}}/css">{% endif %}
|
||||
{% else %}
|
||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||
<link rel="stylesheet" href="/assets/css/main.css?v=137"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=125">
|
||||
<link rel="stylesheet" href="/assets/css/main.css?v=139"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=125">
|
||||
{% endif %}
|
||||
|
||||
</head>
|
||||
|
|
|
@ -1,28 +1,5 @@
|
|||
|
||||
<script>
|
||||
const banModal = function(link, id, name) {
|
||||
document.getElementById("banModalTitle").innerHTML = `Ban @${name}`;
|
||||
document.getElementById("ban-modal-link").value = link;
|
||||
document.getElementById("banUserButton").innerHTML = `Ban @${name}`;
|
||||
|
||||
document.getElementById("banUserButton").onclick = function() {
|
||||
let fd = new FormData(document.getElementById("banModalForm"));
|
||||
fd.append("formkey", formkey());
|
||||
|
||||
let xhr = new XMLHttpRequest();
|
||||
xhr.open("POST", `/ban_user/${id}?form`, true);
|
||||
xhr.withCredentials = true;
|
||||
|
||||
xhr.onload = function(){
|
||||
var myToast = new bootstrap.Toast(document.getElementById('toast-post-success'));
|
||||
myToast.show();
|
||||
document.getElementById('toast-post-success-text').innerHTML = `@${name} banned`;
|
||||
}
|
||||
|
||||
xhr.send(fd);
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="/assets/js/ban_modal.js?v=1"></script>
|
||||
|
||||
<div class="modal fade" id="banModal" tabindex="-1" role="dialog" aria-labelledby="banModalTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
|
|
|
@ -1,27 +1,4 @@
|
|||
<script>
|
||||
function delete_postModal(id) {
|
||||
|
||||
function delete_post(){
|
||||
|
||||
this.innerHTML='Deleting post';
|
||||
this.disabled = true;
|
||||
|
||||
var url = '/delete_post/' + id
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("POST", url, true);
|
||||
var form = new FormData()
|
||||
form.append("formkey", formkey());
|
||||
xhr.withCredentials=true;
|
||||
xhr.onload = function() {location.reload(true);};
|
||||
xhr.send(form);
|
||||
}
|
||||
|
||||
document.getElementById("deletePostButton-mobile").onclick = delete_post;
|
||||
|
||||
document.getElementById("deletePostButton").onclick = delete_post;
|
||||
|
||||
};
|
||||
</script>
|
||||
<script src="/assets/js/delete_post_modal.js?v=2"></script>
|
||||
|
||||
<div class="modal fade modal-sm-bottom" id="deletePostModal" tabindex="-1" role="dialog" aria-labelledby="deletePostModalTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
|
|
|
@ -1,12 +1,3 @@
|
|||
<script>
|
||||
function expandDesktopImage(image) {
|
||||
document.getElementById("desktop-expanded-image").src = image.replace("200w_d.webp", "giphy.webp");
|
||||
document.getElementById("desktop-expanded-image-link").href = image;
|
||||
document.getElementById("desktop-expanded-image-wrap-link").href=image;
|
||||
};
|
||||
</script>
|
||||
|
||||
|
||||
<div class="modal desktop-expanded-image-modal" id="expandImageModal" tabindex="-1" role="dialog" aria-labelledby="expandImageModalTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-xl modal-dialog-centered mx-auto expandedimage" role="document">
|
||||
<div class="modal-content bg-transparent shadow-none m-5 m-md-0">
|
||||
|
|
|
@ -1,12 +1,6 @@
|
|||
{% extends "default.html" %}
|
||||
{% block content %}
|
||||
<script>
|
||||
function removeFollower(event, username) {
|
||||
post_toast('/remove_follow/' + username);
|
||||
let table = document.getElementById("followers-table");
|
||||
table.removeChild(event.target.parentElement.parentElement);
|
||||
}
|
||||
</script>
|
||||
<script src="/assets/js/followers.js?v=2"></script>
|
||||
<pre>
|
||||
|
||||
|
||||
|
|
|
@ -1,12 +1,6 @@
|
|||
{% extends "default.html" %}
|
||||
{% block content %}
|
||||
<script>
|
||||
function removeFollower(event, username) {
|
||||
post_toast('/unfollow/' + username);
|
||||
let table = document.getElementById("followers-table");
|
||||
table.removeChild(event.target.parentElement.parentElement);
|
||||
}
|
||||
</script>
|
||||
<script src="/assets/js/following.js?v=2"></script>
|
||||
<pre>
|
||||
|
||||
|
||||
|
|
|
@ -9,22 +9,20 @@
|
|||
|
||||
|
||||
</pre>
|
||||
<h1>Formatting</h1>
|
||||
<h1>Markdown Formatting</h1>
|
||||
|
||||
On {{'SITE_NAME' | app_config}}, you can use Markdown formatting.
|
||||
You can use Markdown formatting:
|
||||
|
||||
<pre>
|
||||
|
||||
</pre>
|
||||
|
||||
<h2>Inline formatting</h2>
|
||||
|
||||
<table class="table table-striped mb-5">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Type</th>
|
||||
<th>Displays as</th>
|
||||
<th>What you type</th>
|
||||
<th>What gets displayed</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
@ -53,25 +51,40 @@ On {{'SITE_NAME' | app_config}}, you can use Markdown formatting.
|
|||
<td>[{{'SITE_NAME' | app_config}}]({{request.host_url}})</td>
|
||||
<td><a href="{{request.host_url}}">{{'SITE_NAME' | app_config}}</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Images</td>
|
||||
<td>https://i.imgur.com/Lf6dfPO.jpg</td>
|
||||
<td><img src="https://i.imgur.com/Lf6dfPO.jpg"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Youtube Videos</td>
|
||||
<td>https://youtube.com/watch?v=3Hecr51ByE4</td>
|
||||
<td><lite-youtube videoid="3Hecr51ByE4" params="controls=0&modestbranding=1"></lite-youtube></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Video Files</td>
|
||||
<td>https://files.catbox.moe/v4om92.mp4</td>
|
||||
<td><video controls preload="none" class="embedvid"><source src="https://files.catbox.moe/v4om92.mp4" type="video/mp4"></video></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Emojis</td>
|
||||
<td>:marseylove:</td>
|
||||
<td><img loading="lazy" data-bs-toggle="tooltip" alt=":marseylove:" data-bs-original-title=":marseylove:" delay="0" height="30" src="/assets/images/emojis/marseylove.webp?v=1"></td>
|
||||
<td><img loading="lazy" data-bs-toggle="tooltip" class="emj" alt=":marseylove:" data-bs-original-title=":marseylove:" delay="0" height="30" src="/assets/images/emojis/marseylove.webp?v=1"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Mirrored Emojis</td>
|
||||
<td>:!marseylove:</td>
|
||||
<td><img loading="lazy" data-bs-toggle="tooltip" class="mirrored" alt=":!marseylove:" data-bs-original-title=":!marseylove:" delay="0" height="30" src="/assets/images/emojis/marseylove.webp?v=1"></td>
|
||||
<td><img loading="lazy" data-bs-toggle="tooltip" class="emj mirrored" alt=":!marseylove:" data-bs-original-title=":!marseylove:" delay="0" height="30" src="/assets/images/emojis/marseylove.webp?v=1"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Large Emojis</td>
|
||||
<td>:#marseylove:</td>
|
||||
<td><img loading="lazy" data-bs-toggle="tooltip" alt=":!marseylove:" data-bs-original-title=":!marseylove:" delay="0" src="/assets/images/emojis/marseylove.webp?v=1"></td>
|
||||
<td><img loading="lazy" data-bs-toggle="tooltip" class="emj" alt=":!marseylove:" data-bs-original-title=":!marseylove:" delay="0" src="/assets/images/emojis/marseylove.webp?v=1"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Large Mirroed Emojis</td>
|
||||
<td>:#!marseylove:</td>
|
||||
<td><img loading="lazy" data-bs-toggle="tooltip" class="mirrored" alt=":!marseylove:" data-bs-original-title=":!marseylove:" delay="0" src="/assets/images/emojis/marseylove.webp?v=1"></td>
|
||||
<td><img loading="lazy" data-bs-toggle="tooltip" class="emj mirrored" alt=":!marseylove:" data-bs-original-title=":!marseylove:" delay="0" src="/assets/images/emojis/marseylove.webp?v=1"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Poll Options</td>
|
||||
|
@ -83,22 +96,6 @@ On {{'SITE_NAME' | app_config}}, you can use Markdown formatting.
|
|||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>Block formatting</h2>
|
||||
|
||||
These Markdown tags format an entire paragraph of text at a time.
|
||||
|
||||
<table class="table table-striped mb-5">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Type</th>
|
||||
<th>Displays as</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Blockquote</td>
|
||||
<td>> text</td>
|
||||
|
@ -122,12 +119,6 @@ These Markdown tags format an entire paragraph of text at a time.
|
|||
<tr>
|
||||
<td>Code Block</td>
|
||||
<td>```<br>Use three backticks above and below.<br>Or, indent the lines with four spaces.<br>```</td>
|
||||
<td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Spoilers</td>
|
||||
<td><s> bussy > gussy </s></td>
|
||||
<td><p class="spoiler">bussy > gussy</p></td>
|
||||
<td>
|
||||
<pre>
|
||||
Use three backticks above and below.
|
||||
|
@ -135,23 +126,11 @@ These Markdown tags format an entire paragraph of text at a time.
|
|||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<h2>Custom Formatting</h2>
|
||||
|
||||
We also have some custom hooks for mentioning users and subreddits. Note that these only work if the mentioned user or subreddit actually exists.
|
||||
|
||||
<table class="table table-striped mb-5">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Type</th>
|
||||
<th>Displays as</th>
|
||||
<td>Spoilers</td>
|
||||
<td><s> bussy > gussy </s></td>
|
||||
<td><p class="spoiler">bussy > gussy</p></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Username Mention</td>
|
||||
<td>@QuadNarca</td>
|
||||
|
@ -170,21 +149,34 @@ We also have some custom hooks for mentioning users and subreddits. Note that th
|
|||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>Custom HTML</h2>
|
||||
<h1>HTML Formatting</h1>
|
||||
|
||||
And we allow custom HTML in most places.
|
||||
And we allow custom HTML in most places:
|
||||
|
||||
Allowed tags:
|
||||
<pre>
|
||||
|
||||
</pre>
|
||||
|
||||
<h4>Allowed Tags</h4>
|
||||
|
||||
<table class="table table-striped mb-5">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Type</th>
|
||||
<th>Displays as</th>
|
||||
<th>What you type</th>
|
||||
<th>What gets displayed</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Span</td>
|
||||
<td>
|
||||
My mother has <span style="color:blue">blue</span> eyes.
|
||||
</td>
|
||||
<td>
|
||||
My mother has <span style="color:blue">blue</span> eyes.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bold</td>
|
||||
<td>This will be <b>bold</b></td>
|
||||
|
@ -285,7 +277,6 @@ Text 2
|
|||
<td>Italics</td>
|
||||
<td>
|
||||
<i>This</i> is how you get italics.
|
||||
<i>This</i> is how you get italics.
|
||||
</td>
|
||||
<td>
|
||||
<i>This</i> is how you get italics.
|
||||
|
@ -457,19 +448,10 @@ line breaks
|
|||
<img src="https://i.imgur.com/SwVuagI_d.webp" width="200">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Span</td>
|
||||
<td>
|
||||
My mother has <span style="color:blue">blue</span> eyes.
|
||||
</td>
|
||||
<td>
|
||||
My mother has <span style="color:blue">blue</span> eyes.
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>Allowed Attributes</h2>
|
||||
<h4>Allowed Attributes</h4>
|
||||
|
||||
<table class="table table-striped mb-5">
|
||||
<thead class="bg-primary text-white">
|
||||
|
@ -511,7 +493,7 @@ line breaks
|
|||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>Allowed Styles</h2>
|
||||
<h5>Allowed Styles</h5>
|
||||
|
||||
<table class="table table-striped mb-5">
|
||||
<thead class="bg-primary text-white">
|
||||
|
@ -547,6 +529,9 @@ line breaks
|
|||
overflow: auto;
|
||||
}
|
||||
}
|
||||
pre {
|
||||
color: var(--white) !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
{% endblock %}
|
|
@ -213,11 +213,6 @@
|
|||
</div>
|
||||
</nav>
|
||||
|
||||
{% if v %}
|
||||
<script>
|
||||
function formkey() {return '{{v.formkey}}';}
|
||||
</script>
|
||||
{% endif %}
|
||||
<script src="/assets/js/header.js?v=54"></script>
|
||||
|
||||
<style>
|
||||
|
|
|
@ -6,11 +6,11 @@
|
|||
{% block content %}
|
||||
{% if v %}
|
||||
<style>:root{--primary:#{{v.themecolor}}}</style>
|
||||
<link rel="stylesheet" href="/assets/css/main.css?v=137"><link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=125">
|
||||
<link rel="stylesheet" href="/assets/css/main.css?v=139"><link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=125">
|
||||
{% if v.agendaposter %}<link rel="stylesheet" href="/assets/css/agendaposter.css?v=125">{% elif v.css %}<link rel="stylesheet" href="/@{{v.username}}/css">{% endif %}
|
||||
{% else %}
|
||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||
<link rel="stylesheet" href="/assets/css/main.css?v=137"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=125">
|
||||
<link rel="stylesheet" href="/assets/css/main.css?v=139"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=125">
|
||||
{% endif %}
|
||||
|
||||
<div class="row justify-content-around">
|
||||
|
@ -122,14 +122,6 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/assets/js/clipboard.js?v=1"></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>
|
||||
<script src="/assets/js/clipboard.js?v=3"></script>
|
||||
|
||||
{% endblock %}
|
|
@ -12,7 +12,7 @@
|
|||
<title>2-Step Login - {{'SITE_NAME' | app_config}}</title>
|
||||
|
||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||
<link rel="stylesheet" href="/assets/css/main.css?v=137"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=125">
|
||||
<link rel="stylesheet" href="/assets/css/main.css?v=139"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=125">
|
||||
|
||||
</head>
|
||||
|
||||
|
|
|
@ -36,10 +36,10 @@
|
|||
|
||||
{% if v %}
|
||||
<style>:root{--primary:#{{v.themecolor}}}</style>
|
||||
<link rel="stylesheet" href="/assets/css/main.css?v=137"><link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=125">
|
||||
<link rel="stylesheet" href="/assets/css/main.css?v=139"><link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=125">
|
||||
{% else %}
|
||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||
<link rel="stylesheet" href="/assets/css/main.css?v=137"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=125">
|
||||
<link rel="stylesheet" href="/assets/css/main.css?v=139"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=125">
|
||||
{% endif %}
|
||||
|
||||
<link href="/assets/css/fa.css?v=54" rel="stylesheet">
|
||||
|
@ -168,10 +168,6 @@
|
|||
{% block scripts %}
|
||||
{% endblock %}
|
||||
|
||||
<script>
|
||||
function formkey() {return '{{v.formkey}}';}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -4,42 +4,7 @@
|
|||
|
||||
{% block content %}
|
||||
|
||||
|
||||
<script>
|
||||
function block_user() {
|
||||
|
||||
var exileForm = document.getElementById("exile-form");
|
||||
|
||||
var usernameField = document.getElementById("exile-username");
|
||||
|
||||
var isValidUsername = usernameField.checkValidity();
|
||||
|
||||
username = usernameField.value;
|
||||
|
||||
if (isValidUsername) {
|
||||
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("post", "/settings/block");
|
||||
xhr.withCredentials=true;
|
||||
f=new FormData();
|
||||
f.append("username", username);
|
||||
f.append("formkey", formkey());
|
||||
xhr.onload=function(){
|
||||
if (xhr.status<300) {
|
||||
location.reload(true);
|
||||
}
|
||||
else {
|
||||
var myToast = new bootstrap.Toast(document.getElementById('toast-post-success'));
|
||||
myToast.hide();
|
||||
var myToast = new bootstrap.Toast(document.getElementById('toast-post-error'));
|
||||
myToast.show();
|
||||
document.getElementById("toast-error-message").textContent = "Error. Please try again later.";
|
||||
}
|
||||
}
|
||||
xhr.send(f)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<script src="/assets/js/settings_block.js?v=2"></script>
|
||||
|
||||
<div class="row">
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
<title>{% if ref_user %}{{ref_user.username}} invites you to {{'SITE_NAME' | app_config}}{% else %}{{'SITE_NAME' | app_config}}{% endif %}</title>
|
||||
|
||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||
<link rel="stylesheet" href="/assets/css/main.css?v=137"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=125">
|
||||
<link rel="stylesheet" href="/assets/css/main.css?v=139"><link rel="stylesheet" href="/assets/css/{{'DEFAULT_THEME' | app_config}}.css?v=125">
|
||||
|
||||
</head>
|
||||
|
||||
|
|
|
@ -3,27 +3,6 @@
|
|||
{% block pagetype %}userpage{% endblock %}
|
||||
|
||||
{% block fixedMobileBarJS %}
|
||||
<script>
|
||||
var prevScrollpos = window.pageYOffset;
|
||||
window.onscroll = function () {
|
||||
var currentScrollPos = window.pageYOffset;
|
||||
if (prevScrollpos > currentScrollPos) {
|
||||
document.getElementById("fixed-bar-mobile").style.top = "48px";
|
||||
document.getElementById("navbar").classList.remove("shadow");
|
||||
}
|
||||
else if (currentScrollPos <= 125) {
|
||||
document.getElementById("fixed-bar-mobile").style.top = "48px";
|
||||
document.getElementById("navbar").classList.remove("shadow");
|
||||
}
|
||||
else {
|
||||
document.getElementById("fixed-bar-mobile").style.top = "-48px";
|
||||
document.getElementById("dropdownMenuSortBy").classList.remove('show');
|
||||
document.getElementById("dropdownMenuFrom").classList.remove('show');
|
||||
document.getElementById("navbar").classList.add("shadow");
|
||||
}
|
||||
prevScrollpos = currentScrollPos;
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}
|
||||
|
|
|
@ -3,27 +3,6 @@
|
|||
{% block pagetype %}userpage{% endblock %}
|
||||
|
||||
{% block fixedMobileBarJS %}
|
||||
<script>
|
||||
var prevScrollpos = window.pageYOffset;
|
||||
window.onscroll = function () {
|
||||
var currentScrollPos = window.pageYOffset;
|
||||
if (prevScrollpos > currentScrollPos) {
|
||||
document.getElementById("fixed-bar-mobile").style.top = "48px";
|
||||
document.getElementById("navbar").classList.remove("shadow");
|
||||
}
|
||||
else if (currentScrollPos <= 125) {
|
||||
document.getElementById("fixed-bar-mobile").style.top = "48px";
|
||||
document.getElementById("navbar").classList.remove("shadow");
|
||||
}
|
||||
else {
|
||||
document.getElementById("fixed-bar-mobile").style.top = "-48px";
|
||||
document.getElementById("dropdownMenuSortBy").classList.remove('show');
|
||||
document.getElementById("dropdownMenuFrom").classList.remove('show');
|
||||
document.getElementById("navbar").classList.add("shadow");
|
||||
}
|
||||
prevScrollpos = currentScrollPos;
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}
|
||||
|
|
|
@ -3,27 +3,6 @@
|
|||
{% block pagetype %}userpage{% endblock %}
|
||||
|
||||
{% block fixedMobileBarJS %}
|
||||
<script>
|
||||
var prevScrollpos = window.pageYOffset;
|
||||
window.onscroll = function () {
|
||||
var currentScrollPos = window.pageYOffset;
|
||||
if (prevScrollpos > currentScrollPos) {
|
||||
document.getElementById("fixed-bar-mobile").style.top = "48px";
|
||||
document.getElementById("navbar").classList.remove("shadow");
|
||||
}
|
||||
else if (currentScrollPos <= 125) {
|
||||
document.getElementById("fixed-bar-mobile").style.top = "48px";
|
||||
document.getElementById("navbar").classList.remove("shadow");
|
||||
}
|
||||
else {
|
||||
document.getElementById("fixed-bar-mobile").style.top = "-48px";
|
||||
document.getElementById("dropdownMenuSortBy").classList.remove('show');
|
||||
document.getElementById("dropdownMenuFrom").classList.remove('show');
|
||||
document.getElementById("navbar").classList.add("shadow");
|
||||
}
|
||||
prevScrollpos = currentScrollPos;
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}
|
||||
|
|
|
@ -2769,3 +2769,13 @@ I only follow the patriarchal aspects of Islam. Not the aspects that make you a
|
|||
{[para]}
|
||||
There are only two rules: no bigotry and no /r/drama users.
|
||||
{[para]}
|
||||
hey, last night was fun but after watching you eat the rolls as soon as they came to the table I don't think I want to continue this.
|
||||
{[para]}
|
||||
I've posted my created memes for over a decade(s) across the chans, and onto almost EVERY FREE SPEECH SITE. So much of the internet's humor is from me for a very long time.
|
||||
|
||||
So many memes that are world famous are MINE. Mine mine mine.
|
||||
{[para]}
|
||||
I SENSE YOU ARE TRYING TO DOXX ME in a clumsy probing manner.
|
||||
|
||||
DOXXING is frowned upon on all free speech sites.
|
||||
{[para]}
|
||||
|
|
Loading…
Reference in New Issue