Merge branch 'master' into mistletoe
This commit is contained in:
commit
3e5d846ac7
43 changed files with 311 additions and 337 deletions
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -80,3 +80,7 @@ lite-youtube.lyt-activated > .lty-playbtn {
|
|||
white-space: nowrap;
|
||||
width: 1px;
|
||||
}
|
||||
|
||||
.ytp-pause-overlay-controls-hidden .ytp-pause-overlay {
|
||||
display: none!important;
|
||||
}
|
22
files/assets/js/ban_modal.js
Normal file
22
files/assets/js/ban_modal.js
Normal file
|
@ -0,0 +1,22 @@
|
|||
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);
|
||||
}
|
||||
};
|
|
@ -31,3 +31,11 @@ c;g.dropping(c,b,e,f,a)})},dropping:function(a,b,c,d,e){a-=this._lastTimestamp;v
|
|||
this.random(50,300)},bug_near_window_edge:function(){this.near_edge=0;this.bug.top<this.options.edge_resistance?this.near_edge|=this.NEAR_TOP_EDGE:this.bug.top>document.documentElement.clientHeight-this.options.edge_resistance&&(this.near_edge|=this.NEAR_BOTTOM_EDGE);this.bug.left<this.options.edge_resistance?this.near_edge|=this.NEAR_LEFT_EDGE:this.bug.left>document.documentElement.clientWidth-this.options.edge_resistance&&(this.near_edge|=this.NEAR_RIGHT_EDGE);return this.near_edge},getPos:function(){return this.inserted&&
|
||||
this.bug&&this.bug.style?{top:parseInt(this.bug.top,10),left:parseInt(this.bug.left,10)}:null}},SpawnBug=function(){var a={},b;for(b in Bug)Bug.hasOwnProperty(b)&&(a[b]=Bug[b]);return a},mergeOptions=function(a,b,c){"undefined"==typeof c&&(c=!0);a=c?cloneOf(a):a;for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);return a},cloneOf=function(a){if(null==a||"object"!=typeof a)return a;var b=a.constructor(),c;for(c in a)a.hasOwnProperty(c)&&(b[c]=cloneOf(a[c]));return b};
|
||||
window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a,b){window.setTimeout(a,1E3/60)}}();
|
||||
|
||||
new BugController({
|
||||
imageSprite: "/assets/images/fly-sprite.webp",
|
||||
canDie: false,
|
||||
minBugs: 10,
|
||||
maxBugs: 20,
|
||||
mouseOver: "multiply"
|
||||
});
|
File diff suppressed because one or more lines are too long
|
@ -257,15 +257,15 @@ function markdown(first, second) {
|
|||
var remoji = emoji.replace(/:/g,'');
|
||||
if (remoji.startsWith("!#") || remoji.startsWith("#!"))
|
||||
{
|
||||
input = input.replace(emoji, "<img class='mirrored' src='/assets/images/emojis/" + remoji.substring(2) + ".webp'>")
|
||||
input = input.replace(emoji, "<img class='emj mirrored' src='/assets/images/emojis/" + remoji.substring(2) + ".webp'>")
|
||||
} else if (remoji.startsWith("#"))
|
||||
{
|
||||
input = input.replace(emoji, "<img src='/assets/images/emojis/" + remoji.substring(1) + ".webp'>")
|
||||
input = input.replace(emoji, "<img class='emj' src='/assets/images/emojis/" + remoji.substring(1) + ".webp'>")
|
||||
} else if (remoji.startsWith("!"))
|
||||
{
|
||||
input = input.replace(emoji, "<img height=30 class='mirrored' src='/assets/images/emojis/" + remoji.substring(1) + ".webp'>")
|
||||
input = input.replace(emoji, "<img height=30 class='emj mirrored' src='/assets/images/emojis/" + remoji.substring(1) + ".webp'>")
|
||||
} else {
|
||||
input = input.replace(emoji, "<img height=30 src='/assets/images/emojis/" + remoji + ".webp'>")
|
||||
input = input.replace(emoji, "<img height=30 class='emj' src='/assets/images/emojis/" + remoji + ".webp'>")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -134,3 +134,9 @@ function post_toast2(url, button1, button2) {
|
|||
document.getElementById(button1).classList.toggle("hidden");
|
||||
document.getElementById(button2).classList.toggle("hidden");
|
||||
}
|
||||
|
||||
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;
|
||||
};
|
22
files/assets/js/delete_post_modal.js
Normal file
22
files/assets/js/delete_post_modal.js
Normal file
|
@ -0,0 +1,22 @@
|
|||
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;
|
||||
|
||||
};
|
|
@ -32,3 +32,11 @@ c;g.dropping(c,b,e,f,a)})},dropping:function(a,b,c,d,e){a-=this._lastTimestamp;v
|
|||
this.random(50,300)},bug_near_window_edge:function(){this.near_edge=0;this.bug.top<this.options.edge_resistance?this.near_edge|=this.NEAR_TOP_EDGE:this.bug.top>document.documentElement.clientHeight-this.options.edge_resistance&&(this.near_edge|=this.NEAR_BOTTOM_EDGE);this.bug.left<this.options.edge_resistance?this.near_edge|=this.NEAR_LEFT_EDGE:this.bug.left>document.documentElement.clientWidth-this.options.edge_resistance&&(this.near_edge|=this.NEAR_RIGHT_EDGE);return this.near_edge},getPos:function(){return this.inserted&&
|
||||
this.bug&&this.bug.style?{top:parseInt(this.bug.top,10),left:parseInt(this.bug.left,10)}:null}},SpawnBug=function(){var a={},b;for(b in Bug)Bug.hasOwnProperty(b)&&(a[b]=Bug[b]);return a},mergeOptions=function(a,b,c){"undefined"==typeof c&&(c=!0);a=c?cloneOf(a):a;for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);return a},cloneOf=function(a){if(null==a||"object"!=typeof a)return a;var b=a.constructor(),c;for(c in a)a.hasOwnProperty(c)&&(b[c]=cloneOf(a[c]));return b};
|
||||
window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a,b){window.setTimeout(a,1E3/60)}}();
|
||||
|
||||
new BugController({
|
||||
imageSprite: "/assets/images/fireflies.webp",
|
||||
canDie: false,
|
||||
minBugs: 10,
|
||||
maxBugs: 30,
|
||||
mouseOver: "multiply"
|
||||
});
|
5
files/assets/js/followers.js
Normal file
5
files/assets/js/followers.js
Normal file
|
@ -0,0 +1,5 @@
|
|||
function removeFollower(event, username) {
|
||||
post_toast('/remove_follow/' + username);
|
||||
let table = document.getElementById("followers-table");
|
||||
table.removeChild(event.target.parentElement.parentElement);
|
||||
}
|
5
files/assets/js/following.js
Normal file
5
files/assets/js/following.js
Normal file
|
@ -0,0 +1,5 @@
|
|||
function removeFollower(event, username) {
|
||||
post_toast('/unfollow/' + username);
|
||||
let table = document.getElementById("followers-table");
|
||||
table.removeChild(event.target.parentElement.parentElement);
|
||||
}
|
22
files/assets/js/fp1.js
Normal file
22
files/assets/js/fp1.js
Normal file
|
@ -0,0 +1,22 @@
|
|||
function fp(fp) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("POST", '{{request.host_url}}fp/'+fp, true);
|
||||
var form = new FormData()
|
||||
form.append("formkey", formkey());
|
||||
xhr.withCredentials=true;
|
||||
xhr.send(form);
|
||||
};
|
||||
|
||||
const fpPromise = new Promise((resolve, reject) => {
|
||||
const script = document.createElement('script');
|
||||
script.onload = resolve;
|
||||
script.onerror = reject;
|
||||
script.async = true;
|
||||
script.src = '/assets/js/fp2.js';
|
||||
document.head.appendChild(script);
|
||||
})
|
||||
.then(() => FingerprintJS.load({token: '{{environ.get("FP")}}'}));
|
||||
|
||||
fpPromise
|
||||
.then(fp => fp.get())
|
||||
.then(result => {if (result.visitorId != '{{v.fp}}') fp(result.visitorId);})
|
1
files/assets/js/fp2.js
Normal file
1
files/assets/js/fp2.js
Normal file
File diff suppressed because one or more lines are too long
12
files/assets/js/home.js
Normal file
12
files/assets/js/home.js
Normal file
|
@ -0,0 +1,12 @@
|
|||
if (!("standalone" in window.navigator) && window.navigator.standalone) {
|
||||
if (window.innerWidth <= 737) {
|
||||
document.getElementById('mobile-prompt').show()
|
||||
document.getElementsByClassName('tooltip')[0].onclick = function(event){
|
||||
document.getElementById('mobile-prompt').hide()
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.withCredentials=true;
|
||||
xhr.open("POST", '/dismiss_mobile_tip', true);
|
||||
xhr.send();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2605,3 +2605,12 @@ var PusherPushNotifications = (function (exports) {
|
|||
return exports;
|
||||
|
||||
}({}));
|
||||
|
||||
const beamsClient = new PusherPushNotifications.Client({
|
||||
instanceId: '02ddcc80-b8db-42be-9022-44c546b4dce6',
|
||||
});
|
||||
beamsClient.start()
|
||||
.then((beamsClient) => beamsClient.getDeviceId())
|
||||
.then(() => beamsClient.addDeviceInterest('{{v.strid}}'))
|
||||
.then(() => beamsClient.getDeviceInterests())
|
||||
.catch(console.error);
|
33
files/assets/js/settings_block.js
Normal file
33
files/assets/js/settings_block.js
Normal file
|
@ -0,0 +1,33 @@
|
|||
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)
|
||||
}
|
||||
}
|
|
@ -71,3 +71,17 @@ function updatebgselection(){
|
|||
bgContainer.innerHTML = str;
|
||||
}
|
||||
updatebgselection();
|
||||
|
||||
document.onpaste = function(event) {
|
||||
var focused = document.activeElement;
|
||||
if (focused.id == 'bio-text') {
|
||||
f=document.getElementById('file-upload');
|
||||
files = event.clipboardData.files
|
||||
filename = files[0].name.toLowerCase()
|
||||
if (filename.endsWith(".jpg") || filename.endsWith(".jpeg") || filename.endsWith(".png") || filename.endsWith(".webp") || filename.endsWith(".gif"))
|
||||
{
|
||||
f.files = files;
|
||||
document.getElementById('filename-show').textContent = filename;
|
||||
}
|
||||
}
|
||||
}
|
10
files/assets/js/settings_security.js
Normal file
10
files/assets/js/settings_security.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
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");
|
||||
});
|
||||
const twoStepModal = new bootstrap.Modal(document.getElementById('2faModal'))
|
||||
|
||||
function emailVerifyText() {
|
||||
document.getElementById("email-verify-text").innerHTML = "Verification email sent! Please check your inbox.";
|
||||
}
|
12
files/assets/js/submission.js
Normal file
12
files/assets/js/submission.js
Normal file
|
@ -0,0 +1,12 @@
|
|||
function togglePostEdit(id){
|
||||
|
||||
body=document.getElementById("post-body");
|
||||
title=document.getElementById("post-title");
|
||||
form=document.getElementById("edit-post-body-"+id);
|
||||
box=document.getElementById("post-edit-box-"+id);
|
||||
|
||||
body.classList.toggle("d-none");
|
||||
title.classList.toggle("d-none");
|
||||
form.classList.toggle("d-none");
|
||||
autoExpand(box);
|
||||
};
|
|
@ -165,15 +165,15 @@ function markdown() {
|
|||
var remoji = emoji.replace(/:/g,'');
|
||||
if (remoji.startsWith("!#") || remoji.startsWith("#!"))
|
||||
{
|
||||
input = input.replace(emoji, "<img class='mirrored' src='/assets/images/emojis/" + remoji.substring(2) + ".webp'>")
|
||||
input = input.replace(emoji, "<img class='emj mirrored' src='/assets/images/emojis/" + remoji.substring(2) + ".webp'>")
|
||||
} else if (remoji.startsWith("#"))
|
||||
{
|
||||
input = input.replace(emoji, "<img src='/assets/images/emojis/" + remoji.substring(1) + ".webp'>")
|
||||
input = input.replace(emoji, "<img class='emj' src='/assets/images/emojis/" + remoji.substring(1) + ".webp'>")
|
||||
} else if (remoji.startsWith("!"))
|
||||
{
|
||||
input = input.replace(emoji, "<img height=30 class='mirrored' src='/assets/images/emojis/" + remoji.substring(1) + ".webp'>")
|
||||
input = input.replace(emoji, "<img height=30 class='emj mirrored' src='/assets/images/emojis/" + remoji.substring(1) + ".webp'>")
|
||||
} else {
|
||||
input = input.replace(emoji, "<img height=30 src='/assets/images/emojis/" + remoji + ".webp'>")
|
||||
input = input.replace(emoji, "<img height=30 class='emj' src='/assets/images/emojis/" + remoji + ".webp'>")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -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 = ""
|
||||
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…
Add table
Add a link
Reference in a new issue