forked from rDrama/rDrama
make bootstrap work on localhost
parent
d22240160c
commit
e9445efc22
|
@ -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() {
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -29,6 +29,6 @@
|
|||
</table>
|
||||
</div>
|
||||
|
||||
<script src="{{asset('js/sort_table.js')}}"></script>
|
||||
<script defer src="{{asset('js/sort_table.js')}}"></script>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -55,4 +55,4 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<script src="{{asset('js/award_modal.js')}}"></script>
|
||||
<script defer src="{{asset('js/award_modal.js')}}"></script>
|
||||
|
|
|
@ -39,6 +39,6 @@
|
|||
</table>
|
||||
</div>
|
||||
|
||||
<script src="{{asset('js/sort_table.js')}}"></script>
|
||||
<script defer src="{{asset('js/sort_table.js')}}"></script>
|
||||
|
||||
{% endblock %}
|
|
@ -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>
|
|
@ -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">
|
||||
|
|
|
@ -13,4 +13,4 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<script src="{{asset('js/category_modal.js')}}"></script>
|
||||
<script defer src="{{asset('js/category_modal.js')}}"></script>
|
||||
|
|
|
@ -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>
|
|
@ -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) %}
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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>
|
|
@ -92,4 +92,4 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<script src="{{asset('js/emoji_modal.js')}}"></script>
|
||||
<script defer src="{{asset('js/emoji_modal.js')}}"></script>
|
||||
|
|
|
@ -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 %}
|
|
@ -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 %}
|
|
@ -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>
|
||||
|
|
|
@ -112,5 +112,5 @@
|
|||
|
||||
|
||||
</pre>
|
||||
<script src="{{asset('js/sort_table.js')}}"></script>
|
||||
<script defer src="{{asset('js/sort_table.js')}}"></script>
|
||||
{% endblock %}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 %}
|
|
@ -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')}}">
|
||||
|
||||
|
|
|
@ -185,5 +185,5 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<script src="{{asset('js/lottery.js')}}"></script>
|
||||
<script defer src="{{asset('js/lottery.js')}}"></script>
|
||||
</div>
|
||||
|
|
|
@ -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>
|
|
@ -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" %}
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
</table>
|
||||
</div>
|
||||
|
||||
<script src="{{asset('js/sort_table.js')}}"></script>
|
||||
<script defer src="{{asset('js/sort_table.js')}}"></script>
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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';">
|
||||
|
|
|
@ -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 %}
|
|
@ -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 %}
|
|
@ -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">
|
||||
|
||||
|
|
|
@ -88,5 +88,5 @@
|
|||
|
||||
|
||||
</pre>
|
||||
<script src="{{asset('js/sort_table.js')}}"></script>
|
||||
<script defer src="{{asset('js/sort_table.js')}}"></script>
|
||||
{% endblock %}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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')}}">
|
||||
|
||||
|
|
|
@ -26,6 +26,6 @@
|
|||
</table>
|
||||
</div>
|
||||
|
||||
<script src="{{asset('js/sort_table.js')}}"></script>
|
||||
<script defer src="{{asset('js/sort_table.js')}}"></script>
|
||||
|
||||
{% endblock %}
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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" %}
|
||||
|
||||
|
|
|
@ -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 %}
|
|
@ -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 %}
|
||||
|
|
|
@ -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 %}
|
|
@ -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 %}
|
|
@ -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,
|
||||
|
|
|
@ -75,7 +75,7 @@
|
|||
</table>
|
||||
</div>
|
||||
|
||||
<script src="{{asset('js/sort_table.js')}}"></script>
|
||||
<script defer src="{{asset('js/sort_table.js')}}"></script>
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
|
Loading…
Reference in New Issue