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"); if (typeof update_speed_emoji_modal != 'undefined') {
forms.forEach(i => { let forms = e.querySelectorAll("textarea, .allow-emojis");
let pseudo_div = document.createElement("div"); forms.forEach(i => {
pseudo_div.className = "ghostdiv"; let pseudo_div = document.createElement("div");
pseudo_div.style.display = "none"; pseudo_div.className = "ghostdiv";
i.after(pseudo_div); pseudo_div.style.display = "none";
i.addEventListener('input', update_speed_emoji_modal, false); i.after(pseudo_div);
i.addEventListener('keydown', speed_carot_navigate, false); i.addEventListener('input', update_speed_emoji_modal, false);
}); i.addEventListener('keydown', speed_carot_navigate, false);
});
}
} }
var bsTriggerOnReady = function() { var bsTriggerOnReady = function() {

View File

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

View File

@ -373,193 +373,190 @@ function emojiAddToInput(event)
localStorage.setItem("favorite_emojis", JSON.stringify(favorite_emojis)); 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"); speed_carot_modal.style.display = "none";
if (!ghostdiv) return; return -1;
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 emoji_index = 0;
// Just leave it global, I don't care speed_carot_modal.innerHTML = "";
let speed_carot_modal = document.createElement("div"); const MAXXX = 25;
speed_carot_modal.id = "speed-carot-modal"; // Not sure why the results is a Set... but oh well
speed_carot_modal.style.position = "absolute"; let i = 0;
speed_carot_modal.style.left = "0px"; for (let result of results)
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) == ":" && if (i++ > MAXXX) return i;
current_word.charAt(current_word.length-1) != ":"; 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) if (current_word.includes("#")) result = `#${result}`
{ if (current_word.includes("!")) result = `!${result}`
selecting = true;
if (!results || results.size === 0) emoji_option.onclick = (e) => {
{ selecting = false;
speed_carot_modal.style.display = "none"; 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; function update_speed_emoji_modal(event)
speed_carot_modal.innerHTML = ""; {
const MAXXX = 25; const box_coords = update_ghost_div_textarea(event.target);
// 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;
if (current_word.includes("#")) result = `#${result}` let text = event.target.value;
if (current_word.includes("!")) result = `!${result}`
emoji_option.onclick = (e) => { // Unused, but left incase anyone wants to use this more efficient method for emojos
selecting = false; switch (event.data)
speed_carot_modal.style.display = "none"; {
textbox.value = textbox.value.replace(new RegExp(current_word+"(?=\\s|$)", "g"), `:${result}:`) case ':':
markdown(textbox) emoji_typing_state = true;
}; break;
// Pack case ' ':
emoji_option.appendChild(emoji_option_img); emoji_typing_state = false;
emoji_option.appendChild(emoji_option_text); break;
speed_carot_modal.appendChild(emoji_option); default:
} break;
if (i === 0) speed_carot_modal.style.display = "none";
else speed_carot_modal.style.display = "initial";
return i;
} }
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 // Do the search (and do something with it)
switch (event.data) 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 ':': case 38: // Up arrow
emoji_typing_state = true; if (emoji_index)
emoji_index--;
break; break;
case ' ':
emoji_typing_state = false; case 40: // Down arrow
if (emoji_index < select_items.length-1) emoji_index++;
break; break;
case 13:
select_items[emoji_index].click();
default: default:
break; break;
} }
// Get current word at string, such as ":marse" or "word" select_items[emoji_index].classList.add("selected");
let coords = text.indexOf(' ',box_coords.pos); e.preventDefault();
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";
}
} }
}
function speed_carot_navigate(e) // Let's get it running now
{ let forms = document.querySelectorAll("textarea, .allow-emojis");
if (!selecting) return; forms.forEach(i => {
let pseudo_div = document.createElement("div");
let select_items = speed_carot_modal.querySelectorAll(".speed-modal-option"); pseudo_div.className = "ghostdiv";
if (!select_items || !curr_word_is_emoji()) return false; pseudo_div.style.display = "none";
// Up or down arrow or enter i.after(pseudo_div);
if (e.keyCode == 38 || e.keyCode == 40 || e.keyCode == 13) i.addEventListener('input', update_speed_emoji_modal, false);
{ i.addEventListener('keydown', speed_carot_navigate, false);
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);
});
})();
function loadEmojis(inputTargetIDName) function loadEmojis(inputTargetIDName)
{ {
@ -575,4 +572,4 @@ function loadEmojis(inputTargetIDName)
document.getElementById('emojiModal').addEventListener('shown.bs.modal', function () { document.getElementById('emojiModal').addEventListener('shown.bs.modal', function () {
emojiSearchBarDOM.focus(); emojiSearchBarDOM.focus();
}); });

View File

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

View File

@ -55,4 +55,4 @@
</div> </div>
</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> </table>
</div> </div>
<script src="{{asset('js/sort_table.js')}}"></script> <script defer src="{{asset('js/sort_table.js')}}"></script>
{% endblock %} {% endblock %}

View File

@ -35,4 +35,4 @@
</div> </div>
</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 %} {% extends "default.html" %} {% block content %}
<link rel="stylesheet" href="/assets/css/casino.css?v=4000" /> <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 --> <!-- New -->
<div class="casino-games"> <div class="casino-games">

View File

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

View File

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

View File

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

View File

@ -27,4 +27,4 @@
</div> </div>
</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>
</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> </tbody>
</table> </table>
<script src="/assets/js/followers.js?v=4000"></script> <script defer src="/assets/js/followers.js?v=4000"></script>
{% endblock %} {% endblock %}

View File

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

View File

@ -26,4 +26,4 @@
</div> </div>
</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> </pre>
<script src="{{asset('js/sort_table.js')}}"></script> <script defer src="{{asset('js/sort_table.js')}}"></script>
{% endblock %} {% endblock %}

View File

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

View File

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

View File

@ -4,7 +4,7 @@
<html lang="en"> <html lang="en">
<head> <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')}}"> <link rel="icon" type="image/webp" href="{{asset_siteimg('icon.webp')}}">

View File

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

View File

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

View File

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

View File

@ -23,4 +23,4 @@
</div> </div>
</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>
</div> </div>
<br> <br>
<script src="{{asset('js/search.js')}}"></script> <script defer src="{{asset('js/search.js')}}"></script>
{% endif %} {% 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> <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> <h1 class="h4 mb-0">{{query}}</h1>

View File

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

View File

@ -4,7 +4,7 @@
<html lang="en"> <html lang="en">
<head> <head>
<script src="{{asset('js/bootstrap.js')}}"></script> <script defer src="{{asset('js/bootstrap.js')}}"></script>
<meta name="description" content="{{DESCRIPTION}}"> <meta name="description" content="{{DESCRIPTION}}">
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'; connect-src 'self'; object-src 'none';"> <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>
</div> </div>
<script src="/assets/js/settings_blocks.js?v=4000"></script> <script defer src="/assets/js/settings_blocks.js?v=4000"></script>
{% endblock %} {% endblock %}

View File

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

View File

@ -4,7 +4,7 @@
{% block content %} {% 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"> <div class="row">

View File

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

View File

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

View File

@ -4,7 +4,7 @@
<html lang="en"> <html lang="en">
<head> <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')}}"> <link rel="icon" type="image/webp" href="{{asset_siteimg('icon.webp')}}">

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -818,11 +818,11 @@
{% if v %} {% 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> <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> <div id="username" class="d-none">{{u.username}}</div>
{% endif %} {% endif %}
<script src="{{asset('js/userpage.js')}}"></script> <script defer src="{{asset('js/userpage.js')}}"></script>
{% endblock %} {% endblock %}
@ -849,7 +849,7 @@
{% endif %} {% endif %}
{% if not request.path.endswith('/comments') %} {% if not request.path.endswith('/comments') %}
<script src="{{asset('js/marked.js')}}"></script> <script defer src="{{asset('js/marked.js')}}"></script>
{% endif %} {% endif %}
{% if v and v.id != u.id and '/comments' not in request.path %} {% if v and v.id != u.id and '/comments' not in request.path %}

View File

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

View File

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

View File

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