make bootstrap work on localhost

remotes/1693045480750635534/spooky-22
Aevann1 2022-09-08 19:12:46 +02:00
parent d22240160c
commit e9445efc22
45 changed files with 264 additions and 259 deletions

View File

@ -164,15 +164,17 @@ function bs_trigger(e) {
}
})
let forms = document.querySelectorAll("textarea, .allow-emojis");
forms.forEach(i => {
let pseudo_div = document.createElement("div");
pseudo_div.className = "ghostdiv";
pseudo_div.style.display = "none";
i.after(pseudo_div);
i.addEventListener('input', update_speed_emoji_modal, false);
i.addEventListener('keydown', speed_carot_navigate, false);
});
if (typeof update_speed_emoji_modal != 'undefined') {
let forms = e.querySelectorAll("textarea, .allow-emojis");
forms.forEach(i => {
let pseudo_div = document.createElement("div");
pseudo_div.className = "ghostdiv";
pseudo_div.style.display = "none";
i.after(pseudo_div);
i.addEventListener('input', update_speed_emoji_modal, false);
i.addEventListener('keydown', speed_carot_navigate, false);
});
}
}
var bsTriggerOnReady = function() {

View File

@ -253,7 +253,7 @@ function post_comment(fullname, hide){
comments.innerHTML = comment + comments.innerHTML;
if (!hide) comments.scrollIntoView()
bs_trigger(commentForm);
bs_trigger(comments);
btn.disabled = false;
btn.classList.remove('disabled');

View File

@ -373,193 +373,190 @@ function emojiAddToInput(event)
localStorage.setItem("favorite_emojis", JSON.stringify(favorite_emojis));
}
(function() {
const insertAt = (str, sub, pos) => `${str.slice(0, pos)}${sub}${str.slice(pos)}`;
const insertAt = (str, sub, pos) => `${str.slice(0, pos)}${sub}${str.slice(pos)}`;
let emoji_typing_state = false;
let emoji_typing_state = false;
function update_ghost_div_textarea(text)
function update_ghost_div_textarea(text)
{
let ghostdiv = text.parentNode.querySelector(".ghostdiv");
if (!ghostdiv) return;
ghostdiv.innerText = text.value.substring(0, text.selectionStart);
ghostdiv.innerHTML += "<span></span>";
// Now lets get coordinates
ghostdiv.style.display = "initial";
let end = ghostdiv.querySelector("span");
const carot_coords = end.getBoundingClientRect();
const ghostdiv_coords = ghostdiv.getBoundingClientRect();
ghostdiv.style.display = "none";
return { pos: text.selectionStart, x: carot_coords.x, y: carot_coords.y - ghostdiv_coords.y };
}
// Used for anything where a user is typing, specifically for the emoji modal
// Just leave it global, I don't care
let speed_carot_modal = document.createElement("div");
speed_carot_modal.id = "speed-carot-modal";
speed_carot_modal.style.position = "absolute";
speed_carot_modal.style.left = "0px";
speed_carot_modal.style.top = "0px";
speed_carot_modal.style.display = "none";
document.body.appendChild(speed_carot_modal);
let e
let current_word = "";
let selecting;
let emoji_index = 0;
function curr_word_is_emoji()
{
return current_word && current_word.charAt(0) == ":" &&
current_word.charAt(current_word.length-1) != ":";
}
function populate_speed_emoji_modal(results, textbox)
{
selecting = true;
if (!results || results.size === 0)
{
let ghostdiv = text.parentNode.querySelector(".ghostdiv");
if (!ghostdiv) return;
ghostdiv.innerText = text.value.substring(0, text.selectionStart);
ghostdiv.innerHTML += "<span></span>";
// Now lets get coordinates
ghostdiv.style.display = "initial";
let end = ghostdiv.querySelector("span");
const carot_coords = end.getBoundingClientRect();
const ghostdiv_coords = ghostdiv.getBoundingClientRect();
ghostdiv.style.display = "none";
return { pos: text.selectionStart, x: carot_coords.x, y: carot_coords.y - ghostdiv_coords.y };
speed_carot_modal.style.display = "none";
return -1;
}
// Used for anything where a user is typing, specifically for the emoji modal
// Just leave it global, I don't care
let speed_carot_modal = document.createElement("div");
speed_carot_modal.id = "speed-carot-modal";
speed_carot_modal.style.position = "absolute";
speed_carot_modal.style.left = "0px";
speed_carot_modal.style.top = "0px";
speed_carot_modal.style.display = "none";
document.body.appendChild(speed_carot_modal);
let e
let current_word = "";
let selecting;
let emoji_index = 0;
function curr_word_is_emoji()
emoji_index = 0;
speed_carot_modal.innerHTML = "";
const MAXXX = 25;
// Not sure why the results is a Set... but oh well
let i = 0;
for (let result of results)
{
return current_word && current_word.charAt(0) == ":" &&
current_word.charAt(current_word.length-1) != ":";
}
if (i++ > MAXXX) return i;
let emoji_option = document.createElement("div");
emoji_option.className = "speed-modal-option emoji-option " + (i === 1 ? "selected" : "");
emoji_option.tabIndex = 0;
let emoji_option_img = document.createElement("img");
emoji_option_img.className = "speed-modal-image emoji-option-image";
// This is a bit
emoji_option_img.src = `/e/${result}.webp`;
let emoji_option_text = document.createElement("span");
emoji_option_text.title = result;
emoji_option_text.innerText = result;
function populate_speed_emoji_modal(results, textbox)
{
selecting = true;
if (current_word.includes("#")) result = `#${result}`
if (current_word.includes("!")) result = `!${result}`
if (!results || results.size === 0)
{
emoji_option.onclick = (e) => {
selecting = false;
speed_carot_modal.style.display = "none";
return -1;
}
textbox.value = textbox.value.replace(new RegExp(current_word+"(?=\\s|$)", "g"), `:${result}:`)
markdown(textbox)
};
// Pack
emoji_option.appendChild(emoji_option_img);
emoji_option.appendChild(emoji_option_text);
speed_carot_modal.appendChild(emoji_option);
}
if (i === 0) speed_carot_modal.style.display = "none";
else speed_carot_modal.style.display = "initial";
return i;
}
emoji_index = 0;
speed_carot_modal.innerHTML = "";
const MAXXX = 25;
// Not sure why the results is a Set... but oh well
let i = 0;
for (let result of results)
{
if (i++ > MAXXX) return i;
let emoji_option = document.createElement("div");
emoji_option.className = "speed-modal-option emoji-option " + (i === 1 ? "selected" : "");
emoji_option.tabIndex = 0;
let emoji_option_img = document.createElement("img");
emoji_option_img.className = "speed-modal-image emoji-option-image";
// This is a bit
emoji_option_img.src = `/e/${result}.webp`;
let emoji_option_text = document.createElement("span");
emoji_option_text.title = result;
emoji_option_text.innerText = result;
function update_speed_emoji_modal(event)
{
const box_coords = update_ghost_div_textarea(event.target);
if (current_word.includes("#")) result = `#${result}`
if (current_word.includes("!")) result = `!${result}`
let text = event.target.value;
emoji_option.onclick = (e) => {
selecting = false;
speed_carot_modal.style.display = "none";
textbox.value = textbox.value.replace(new RegExp(current_word+"(?=\\s|$)", "g"), `:${result}:`)
markdown(textbox)
};
// Pack
emoji_option.appendChild(emoji_option_img);
emoji_option.appendChild(emoji_option_text);
speed_carot_modal.appendChild(emoji_option);
}
if (i === 0) speed_carot_modal.style.display = "none";
else speed_carot_modal.style.display = "initial";
return i;
// Unused, but left incase anyone wants to use this more efficient method for emojos
switch (event.data)
{
case ':':
emoji_typing_state = true;
break;
case ' ':
emoji_typing_state = false;
break;
default:
break;
}
function update_speed_emoji_modal(event)
// Get current word at string, such as ":marse" or "word"
let coords = text.indexOf(' ',box_coords.pos);
current_word = /\S+$/.exec(text.slice(0, coords === -1 ? text.length : coords));
if (current_word) current_word = current_word.toString();
/* We could also check emoji_typing_state here, which is less accurate but more efficient. I've
* kept it unless someone wants to provide an option to toggle it for performance */
if (curr_word_is_emoji() && current_word != ":")
{
const box_coords = update_ghost_div_textarea(event.target);
loadEmojis(null);
let modal_pos = event.target.getBoundingClientRect();
modal_pos.x += window.scrollX;
modal_pos.y += window.scrollY;
let text = event.target.value;
speed_carot_modal.style.display = "initial";
speed_carot_modal.style.left = box_coords.x - 35 + "px";
speed_carot_modal.style.top = modal_pos.y + box_coords.y + 14 + "px";
// Unused, but left incase anyone wants to use this more efficient method for emojos
switch (event.data)
// Do the search (and do something with it)
populate_speed_emoji_modal(emojisSearchDictionary.searchFor(current_word.substr(1).replace(/#/g, "").replace(/!/g, "")), event.target);
}
else {
speed_carot_modal.style.display = "none";
}
}
function speed_carot_navigate(e)
{
if (!selecting) return;
let select_items = speed_carot_modal.querySelectorAll(".speed-modal-option");
if (!select_items || !curr_word_is_emoji()) return false;
// Up or down arrow or enter
if (e.keyCode == 38 || e.keyCode == 40 || e.keyCode == 13)
{
if (emoji_index > select_items.length)
emoji_index = select_items;
select_items[emoji_index].classList.remove("selected");
switch (e.keyCode)
{
case ':':
emoji_typing_state = true;
case 38: // Up arrow
if (emoji_index)
emoji_index--;
break;
case ' ':
emoji_typing_state = false;
case 40: // Down arrow
if (emoji_index < select_items.length-1) emoji_index++;
break;
case 13:
select_items[emoji_index].click();
default:
break;
}
// Get current word at string, such as ":marse" or "word"
let coords = text.indexOf(' ',box_coords.pos);
current_word = /\S+$/.exec(text.slice(0, coords === -1 ? text.length : coords));
if (current_word) current_word = current_word.toString();
/* We could also check emoji_typing_state here, which is less accurate but more efficient. I've
* kept it unless someone wants to provide an option to toggle it for performance */
if (curr_word_is_emoji() && current_word != ":")
{
loadEmojis(null);
let modal_pos = event.target.getBoundingClientRect();
modal_pos.x += window.scrollX;
modal_pos.y += window.scrollY;
speed_carot_modal.style.display = "initial";
speed_carot_modal.style.left = box_coords.x - 35 + "px";
speed_carot_modal.style.top = modal_pos.y + box_coords.y + 14 + "px";
// Do the search (and do something with it)
populate_speed_emoji_modal(emojisSearchDictionary.searchFor(current_word.substr(1).replace(/#/g, "").replace(/!/g, "")), event.target);
}
else {
speed_carot_modal.style.display = "none";
}
select_items[emoji_index].classList.add("selected");
e.preventDefault();
}
}
function speed_carot_navigate(e)
{
if (!selecting) return;
let select_items = speed_carot_modal.querySelectorAll(".speed-modal-option");
if (!select_items || !curr_word_is_emoji()) return false;
// Up or down arrow or enter
if (e.keyCode == 38 || e.keyCode == 40 || e.keyCode == 13)
{
if (emoji_index > select_items.length)
emoji_index = select_items;
select_items[emoji_index].classList.remove("selected");
switch (e.keyCode)
{
case 38: // Up arrow
if (emoji_index)
emoji_index--;
break;
case 40: // Down arrow
if (emoji_index < select_items.length-1) emoji_index++;
break;
case 13:
select_items[emoji_index].click();
default:
break;
}
select_items[emoji_index].classList.add("selected");
e.preventDefault();
}
}
// Let's get it running now
let forms = document.querySelectorAll("textarea, .allow-emojis");
forms.forEach(i => {
let pseudo_div = document.createElement("div");
pseudo_div.className = "ghostdiv";
pseudo_div.style.display = "none";
i.after(pseudo_div);
i.addEventListener('input', update_speed_emoji_modal, false);
i.addEventListener('keydown', speed_carot_navigate, false);
});
})();
// Let's get it running now
let forms = document.querySelectorAll("textarea, .allow-emojis");
forms.forEach(i => {
let pseudo_div = document.createElement("div");
pseudo_div.className = "ghostdiv";
pseudo_div.style.display = "none";
i.after(pseudo_div);
i.addEventListener('input', update_speed_emoji_modal, false);
i.addEventListener('keydown', speed_carot_navigate, false);
});
function loadEmojis(inputTargetIDName)
{
@ -575,4 +572,4 @@ function loadEmojis(inputTargetIDName)
document.getElementById('emojiModal').addEventListener('shown.bs.modal', function () {
emojiSearchBarDOM.focus();
});
});

View File

@ -29,6 +29,6 @@
</table>
</div>
<script src="{{asset('js/sort_table.js')}}"></script>
<script defer src="{{asset('js/sort_table.js')}}"></script>
{% endblock %}

View File

@ -55,4 +55,4 @@
</div>
</div>
<script src="{{asset('js/award_modal.js')}}"></script>
<script defer src="{{asset('js/award_modal.js')}}"></script>

View File

@ -39,6 +39,6 @@
</table>
</div>
<script src="{{asset('js/sort_table.js')}}"></script>
<script defer src="{{asset('js/sort_table.js')}}"></script>
{% endblock %}

View File

@ -35,4 +35,4 @@
</div>
</div>
<script src="/assets/js/ban_modal.js?v=4000"></script>
<script defer src="/assets/js/ban_modal.js?v=4000"></script>

View File

@ -1,6 +1,6 @@
{% extends "default.html" %} {% block content %}
<link rel="stylesheet" href="/assets/css/casino.css?v=4000" />
<script src="/assets/js/casino.js?v=4001"></script>
<script defer src="/assets/js/casino.js?v=4001"></script>
<!-- New -->
<div class="casino-games">

View File

@ -13,4 +13,4 @@
</div>
</div>
<script src="{{asset('js/category_modal.js')}}"></script>
<script defer src="{{asset('js/category_modal.js')}}"></script>

View File

@ -3,7 +3,7 @@
<!DOCTYPE html>
<html lang="en">
<head>
<script src="{{asset('js/bootstrap.js')}}"></script>
<script defer src="{{asset('js/bootstrap.js')}}"></script>
<meta name="description" content="{{DESCRIPTION}}">
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'; connect-src 'self'; object-src 'none';">
@ -220,8 +220,8 @@
{% include "emoji_modal.html" %}
{% include "expanded_image_modal.html" %}
<script src="{{asset('js/lozad.js')}}"></script>
<script src="/assets/js/lite-youtube.js?v=4000"></script>
<script src="/chat.js?h=4"></script>
<script defer src="{{asset('js/lozad.js')}}"></script>
<script defer src="/assets/js/lite-youtube.js?v=4000"></script>
<script defer src="/chat.js?h=4"></script>
</body>

View File

@ -817,20 +817,20 @@
{% endif %}
{% if v %}
<script src="{{asset('js/marked.js')}}"></script>
<script src="{{asset('js/comments_v.js')}}"></script>
<script defer src="{{asset('js/marked.js')}}"></script>
<script defer src="{{asset('js/comments_v.js')}}"></script>
{% endif %}
<script src="/assets/js/clipboard.js?v=4000"></script>
<script defer src="/assets/js/clipboard.js?v=4000"></script>
{% if v and v.admin_level >= 2 %}
<script src="{{asset('js/comments_admin.js')}}"></script>
<script defer src="{{asset('js/comments_admin.js')}}"></script>
{% endif %}
{% include "expanded_image_modal.html" %}
<script src="/assets/js/comments+submission_listing.js?h=4"></script>
<script src="/assets/js/comments.js?v=4000"></script>
<script defer src="/assets/js/comments+submission_listing.js?h=4"></script>
<script defer src="/assets/js/comments.js?v=4000"></script>
<script>
{% if p and (not v or v.highlightcomments) %}

View File

@ -3,7 +3,7 @@
<!DOCTYPE html>
<html lang="en">
<head>
<script src="{{asset('js/bootstrap.js')}}"></script>
<script defer src="{{asset('js/bootstrap.js')}}"></script>
<meta name="description" content="{{DESCRIPTION}}">
@ -377,13 +377,13 @@
</div>
</div>
<script src="{{asset('js/lozad.js')}}"></script>
<script defer src="{{asset('js/lozad.js')}}"></script>
{% if v %}
<script src="{{asset('js/formatting.js')}}"></script>
<script defer src="{{asset('js/formatting.js')}}"></script>
{% endif %}
<script src="/assets/js/lite-youtube.js?v=4000"></script>
<script defer src="/assets/js/lite-youtube.js?v=4000"></script>
</body>

View File

@ -27,4 +27,4 @@
</div>
</div>
<script src="/assets/js/delete_post_modal.js?v=4000"></script>
<script defer src="/assets/js/delete_post_modal.js?v=4000"></script>

View File

@ -92,4 +92,4 @@
</div>
</div>
<script src="{{asset('js/emoji_modal.js')}}"></script>
<script defer src="{{asset('js/emoji_modal.js')}}"></script>

View File

@ -31,6 +31,6 @@
</tbody>
</table>
<script src="/assets/js/followers.js?v=4000"></script>
<script defer src="/assets/js/followers.js?v=4000"></script>
{% endblock %}

View File

@ -29,6 +29,6 @@
</tbody>
</table>
<script src="/assets/js/following.js?v=4000"></script>
<script defer src="/assets/js/following.js?v=4000"></script>
{% endblock %}

View File

@ -26,4 +26,4 @@
</div>
</div>
<script src="/assets/js/gif_modal.js?v=4000"></script>
<script defer src="/assets/js/gif_modal.js?v=4000"></script>

View File

@ -112,5 +112,5 @@
</pre>
<script src="{{asset('js/sort_table.js')}}"></script>
<script defer src="{{asset('js/sort_table.js')}}"></script>
{% endblock %}

View File

@ -184,7 +184,7 @@
{% if PUSHER_ID != 'blahblahblah' and v %}
<div class="d-none" id="strid">{{SITE}}{{v.id}}</div>
<div class="d-none" id="pusherid">{{PUSHER_ID}}</div>
<script src="/assets/js/pusher.js?v=4000"></script>
<script defer src="/assets/js/pusher.js?v=4000"></script>
<script>
if (typeof Android != 'undefined') {
Android.Subscribe('{{SITE}}{{v.id}}');
@ -210,15 +210,17 @@
<script>
if (!("standalone" in window.navigator) && !(window.navigator.standalone)) {
if (window.innerWidth <= 737) {
const tt = bootstrap.Tooltip.getOrCreateInstance(document.getElementById('mobile-prompt'))
tt.show()
document.getElementsByClassName('tooltip')[0].onclick = function(event){
tt.hide()
var xhr = new XMLHttpRequest();
xhr.withCredentials=true;
xhr.open("POST", '/dismiss_mobile_tip', true);
xhr.send();
}
window.addEventListener('DOMContentLoaded', function() {
const tt = bootstrap.Tooltip.getOrCreateInstance(document.getElementById('mobile-prompt'))
tt.show()
document.getElementsByClassName('tooltip')[0].onclick = function(event){
tt.hide()
var xhr = new XMLHttpRequest();
xhr.withCredentials=true;
xhr.open("POST", '/dismiss_mobile_tip', true);
xhr.send();
}
})
}
}
</script>

View File

@ -160,6 +160,6 @@
</div>
</div>
<script src="/assets/js/clipboard.js?v=4000"></script>
<script defer src="/assets/js/clipboard.js?v=4000"></script>
{% endblock %}

View File

@ -4,7 +4,7 @@
<html lang="en">
<head>
<script src="{{asset('js/bootstrap.js')}}"></script>
<script defer src="{{asset('js/bootstrap.js')}}"></script>
<link rel="icon" type="image/webp" href="{{asset_siteimg('icon.webp')}}">

View File

@ -185,5 +185,5 @@
</div>
</div>
<script src="{{asset('js/lottery.js')}}"></script>
<script defer src="{{asset('js/lottery.js')}}"></script>
</div>

View File

@ -80,4 +80,4 @@
</div>
</div>
<script src="/assets/js/mobile_navigation_bar.js?v=4000"></script>
<script defer src="/assets/js/mobile_navigation_bar.js?v=4000"></script>

View File

@ -111,7 +111,7 @@
</div>
</div>
<script src="/assets/js/clipboard.js?v=4000"></script>
<script defer src="/assets/js/clipboard.js?v=4000"></script>
{% else %}
{% with comments=notifications %}
{% include "comments.html" %}

View File

@ -38,7 +38,7 @@
</table>
</div>
<script src="{{asset('js/sort_table.js')}}"></script>
<script defer src="{{asset('js/sort_table.js')}}"></script>
{% endif %}

View File

@ -23,4 +23,4 @@
</div>
</div>
<script src="/assets/js/report_post_modal.js?v=4001"></script>
<script defer src="/assets/js/report_post_modal.js?v=4001"></script>

View File

@ -83,7 +83,7 @@
</div>
</div>
<br>
<script src="{{asset('js/search.js')}}"></script>
<script defer src="{{asset('js/search.js')}}"></script>
{% endif %}
<div class="text-muted text-small mb-1">Showing {% block listinglength %}{{listing | length}}{% endblock %} of {{total}} result{{'s' if total != 1 else ''}} for</div>
<h1 class="h4 mb-0">{{query}}</h1>

View File

@ -3,7 +3,7 @@
<!DOCTYPE html>
<html lang="en">
<head>
<script src="{{asset('js/bootstrap.js')}}"></script>
<script defer src="{{asset('js/bootstrap.js')}}"></script>
<meta name="description" content="{{DESCRIPTION}}">
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'; connect-src 'self'; object-src 'none';">
@ -260,7 +260,7 @@
{% block onload %}{% endblock %}
<script src="/assets/js/clipboard.js?v=4000"></script>
<script defer src="/assets/js/clipboard.js?v=4000"></script>
</body>

View File

@ -4,7 +4,7 @@
<html lang="en">
<head>
<script src="{{asset('js/bootstrap.js')}}"></script>
<script defer src="{{asset('js/bootstrap.js')}}"></script>
<meta name="description" content="{{DESCRIPTION}}">
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'; connect-src 'self'; object-src 'none';">

View File

@ -111,6 +111,6 @@
</div>
</div>
<script src="/assets/js/settings_blocks.js?v=4000"></script>
<script defer src="/assets/js/settings_blocks.js?v=4000"></script>
{% endblock %}

View File

@ -786,6 +786,6 @@
</script>
{% endif %}
<script src="/assets/js/settings_profile.js?v=4000"></script>
<script defer src="/assets/js/settings_profile.js?v=4000"></script>
{% endblock %}

View File

@ -4,7 +4,7 @@
{% block content %}
<script src="/assets/js/settings_security.js?v=4000"></script>
<script defer src="/assets/js/settings_security.js?v=4000"></script>
<div class="row">

View File

@ -88,5 +88,5 @@
</pre>
<script src="{{asset('js/sort_table.js')}}"></script>
<script defer src="{{asset('js/sort_table.js')}}"></script>
{% endblock %}

View File

@ -3,7 +3,7 @@
<!DOCTYPE html>
<html lang="en">
<head>
<script src="{{asset('js/bootstrap.js')}}"></script>
<script defer src="{{asset('js/bootstrap.js')}}"></script>
<link rel="icon" type="image/webp" href="{{asset_siteimg('icon.webp')}}">
@ -140,10 +140,10 @@
</div>
</div>
<script src="/assets/js/signup.js?v=4000"></script>
<script defer src="/assets/js/signup.js?v=4000"></script>
{% if hcaptcha %}
<script src="/assets/js/hcaptcha.js?v=4000"></script>
<script defer src="/assets/js/hcaptcha.js?v=4000"></script>
{% endif %}
</body>

View File

@ -4,7 +4,7 @@
<html lang="en">
<head>
<script src="{{asset('js/bootstrap.js')}}"></script>
<script defer src="{{asset('js/bootstrap.js')}}"></script>
<link rel="icon" type="image/webp" href="{{asset_siteimg('icon.webp')}}">

View File

@ -26,6 +26,6 @@
</table>
</div>
<script src="{{asset('js/sort_table.js')}}"></script>
<script defer src="{{asset('js/sort_table.js')}}"></script>
{% endblock %}

View File

@ -744,9 +744,9 @@
{% if p.domain == "twitter.com" %}
{{p.embed_url | safe}}
{% if v and v.theme.split("_")[0] in ["light", "coffee", "4chan"] %}
<script src="/assets/js/twitterlight.js?v=4000"></script>
<script defer src="/assets/js/twitterlight.js?v=4000"></script>
{% else %}
<script src="/assets/js/twitter.js?v=4000"></script>
<script defer src="/assets/js/twitter.js?v=4000"></script>
{% endif %}
{% elif p.domain in ['youtu.be','youtube.com'] and p.embed_url and p.embed_url.startswith('<lite-youtube') %}
{{p.embed_url | safe}}
@ -1098,35 +1098,37 @@
{% endif %}
{% if v and (v.id == p.author_id or v.admin_level > 1 and v.admin_level > 2) %}
<script src="/assets/js/togglePostEdit.js?v=4000"></script>
<script defer src="/assets/js/togglePostEdit.js?v=4000"></script>
{% endif %}
{% if not v or v.highlightcomments %}
<script src="/assets/js/new_comments_count.js?v=4000"></script>
<script defer src="/assets/js/new_comments_count.js?v=4000"></script>
{% endif %}
<script src="/assets/js/clipboard.js?v=4000"></script>
<script defer src="/assets/js/clipboard.js?v=4000"></script>
{% if not p.replies %}
{% include "comments.html" %}
{% endif %}
{% if p.award_count("shit", v) %}
<script src="/assets/js/critters.js?v=4000"></script>
<script src="/assets/js/bugs.js?v=4000"></script>
<script defer src="/assets/js/critters.js?v=4000"></script>
<script defer src="/assets/js/bugs.js?v=4000"></script>
{% endif %}
{% if p.award_count("fireflies", v) %}
<script src="/assets/js/critters.js?v=4000"></script>
<script src="/assets/js/fireflies.js?v=4000"></script>
<script defer src="/assets/js/critters.js?v=4000"></script>
<script defer src="/assets/js/fireflies.js?v=4000"></script>
{% endif %}
<script>
(() => {
{% if not v or v.highlightcomments %}
showNewCommentCounts('{{p.id}}', {{p.comment_count}})
window.addEventListener('DOMContentLoaded', function() {
showNewCommentCounts('{{p.id}}', {{p.comment_count}})
})
{% endif %}
{% if "?context" not in request.full_path %}
@ -1188,7 +1190,7 @@
{% endif %}
{% if p.award_count("firework", v) %}
<script src="/assets/js/fireworks.js?v=4000"></script>
<script defer src="/assets/js/fireworks.js?v=4000"></script>
<div class="firework">
<img src="">
</div>
@ -1213,7 +1215,7 @@
{% endif %}
{% if p.award_count("ricardo", v) %}
<script src="/assets/js/ricardo.js?v=4000"></script>
<script defer src="/assets/js/ricardo.js?v=4000"></script>
<div id="ricardo1" class="ricardo ricardoleft">
<img src="/i/ricardo1.webp">
</div>

View File

@ -12,7 +12,7 @@
{% endif %}
{% if not v or v.highlightcomments %}
<script src="/assets/js/new_comments_count.js?v=4000"></script>
<script defer src="/assets/js/new_comments_count.js?v=4000"></script>
{% endif %}
{% include "popover.html" %}
@ -306,7 +306,9 @@
<script>
{% if not v or v.highlightcomments %}
showNewCommentCounts({{p.id}}, {{p.comment_count}})
window.addEventListener('DOMContentLoaded', function() {
showNewCommentCounts({{p.id}}, {{p.comment_count}})
})
{% endif %}
</script>
@ -427,6 +429,6 @@
{% endif %}
{% include "expanded_image_modal.html" %}
<script src="/assets/js/clipboard.js?v=4000"></script>
<script src="/assets/js/comments+submission_listing.js?h=4"></script>
<script src="{{asset('js/submission_listing.js')}}"></script>
<script defer src="/assets/js/clipboard.js?v=4000"></script>
<script defer src="/assets/js/comments+submission_listing.js?h=4"></script>
<script defer src="{{asset('js/submission_listing.js')}}"></script>

View File

@ -3,7 +3,7 @@
<!DOCTYPE html>
<html lang="en">
<head>
<script src="{{asset('js/bootstrap.js')}}"></script>
<script defer src="{{asset('js/bootstrap.js')}}"></script>
<meta name="description" content="{{DESCRIPTION}}">
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'; connect-src 'self'; object-src 'none';">
@ -228,9 +228,9 @@
</script>
{% endif %}
<script src="{{asset('js/marked.js')}}"></script>
<script src="{{asset('js/formatting.js')}}"></script>
<script src="{{asset('js/submit.js')}}"></script>
<script defer src="{{asset('js/marked.js')}}"></script>
<script defer src="{{asset('js/formatting.js')}}"></script>
<script defer src="{{asset('js/submit.js')}}"></script>
{% include "emoji_modal.html" %}
{% include "gif_modal.html" %}

View File

@ -44,5 +44,5 @@
</div>
</div>
<script src="/assets/js/clipboard.js?v=4000"></script>
<script defer src="/assets/js/clipboard.js?v=4000"></script>
{% endblock %}

View File

@ -818,11 +818,11 @@
{% if v %}
<div id='tax' class="d-none">{% if v.patron or u.patron or v.alts_patron or u.alts_patron %}0{% else %}0.03{% endif %}</div>
<script src="{{asset('js/userpage_v.js')}}"></script>
<script defer src="{{asset('js/userpage_v.js')}}"></script>
<div id="username" class="d-none">{{u.username}}</div>
{% endif %}
<script src="{{asset('js/userpage.js')}}"></script>
<script defer src="{{asset('js/userpage.js')}}"></script>
{% endblock %}
@ -849,7 +849,7 @@
{% endif %}
{% if not request.path.endswith('/comments') %}
<script src="{{asset('js/marked.js')}}"></script>
<script defer src="{{asset('js/marked.js')}}"></script>
{% endif %}
{% if v and v.id != u.id and '/comments' not in request.path %}

View File

@ -118,8 +118,8 @@
{% if v %}
<div id='tax' class="d-none">{% if v.patron or u.patron %}0{% else %}0.03{% endif %}</div>
<div id="username" class="d-none">{{u.username}}</div>
<script src="{{asset('js/userpage_v.js')}}"></script>
<script defer src="{{asset('js/userpage_v.js')}}"></script>
{% endif %}
<script src="{{asset('js/userpage.js')}}"></script>
<script defer src="{{asset('js/userpage.js')}}"></script>
{% endblock %}

View File

@ -34,9 +34,9 @@
<div id='tax' class="d-none">{% if v.patron or u.patron %}0{% else %}0.03{% endif %}</div>
<div id="username" class="d-none">{{u.username}}</div>
{%- include "emoji_modal.html" -%}
<script src="{{asset('js/userpage_v.js')}}"></script>
<script defer src="{{asset('js/userpage_v.js')}}"></script>
{% endif %}
<script src="{{asset('js/userpage.js')}}"></script>
<script defer src="{{asset('js/userpage.js')}}"></script>
{% endblock %}

View File

@ -16,7 +16,7 @@ set CACHE_VER = {
'css/win98.css': 4003,
'js/award_modal.js': 4000,
'js/bootstrap.js': 4001,
'js/bootstrap.js': 4002,
'js/category_modal.js': 4000,
'js/comments_admin.js': 4000,
'js/comments_v.js': 4001,

View File

@ -75,7 +75,7 @@
</table>
</div>
<script src="{{asset('js/sort_table.js')}}"></script>
<script defer src="{{asset('js/sort_table.js')}}"></script>
{% endif %}