potential fix for emojis sometimes not loading properly

This commit is contained in:
x
2026-01-25 15:47:08 +01:00
parent a32462953d
commit 61614c7d2f

View File

@@ -37,6 +37,9 @@ class CommentSystem {
this.customEmojis[e.name] = e.url; this.customEmojis[e.name] = e.url;
}); });
console.log('Loaded Emojis:', this.customEmojis); console.log('Loaded Emojis:', this.customEmojis);
// Preload images to prevent NS Binding Aborted errors
this.preloadEmojiImages();
} else { } else {
this.customEmojis = {}; this.customEmojis = {};
} }
@@ -46,6 +49,17 @@ class CommentSystem {
} }
} }
preloadEmojiImages() {
// Preload all emoji images into browser cache
if (!this.customEmojis) return;
Object.values(this.customEmojis).forEach(url => {
const img = new Image();
img.src = url;
// No need to append to DOM, just loading into cache
});
}
// ... // ...
renderEmoji(match, name) { renderEmoji(match, name) {
@@ -645,13 +659,37 @@ class CommentSystem {
if (actions) { if (actions) {
actions.prepend(trigger); actions.prepend(trigger);
// Create picker once and cache it
let picker = null;
let closeHandler = null;
trigger.addEventListener('click', (e) => { trigger.addEventListener('click', (e) => {
e.preventDefault(); e.preventDefault();
let picker = container.querySelector('.emoji-picker');
// If picker already exists, toggle visibility
if (picker) { if (picker) {
picker.remove(); const isVisible = picker.style.display !== 'none';
if (isVisible) {
picker.style.display = 'none';
if (closeHandler) {
document.removeEventListener('click', closeHandler);
closeHandler = null;
}
} else {
picker.style.display = 'block';
closeHandler = (ev) => {
if (!picker.contains(ev.target) && ev.target !== trigger) {
picker.style.display = 'none';
document.removeEventListener('click', closeHandler);
closeHandler = null;
}
};
setTimeout(() => document.addEventListener('click', closeHandler), 0);
}
return; return;
} }
// Create picker only once
picker = document.createElement('div'); picker = document.createElement('div');
picker.className = 'emoji-picker'; picker.className = 'emoji-picker';
@@ -661,6 +699,14 @@ class CommentSystem {
const img = document.createElement('img'); const img = document.createElement('img');
img.src = url; img.src = url;
img.title = `:${name}:`; img.title = `:${name}:`;
img.loading = 'lazy'; // Use native lazy loading
// Add error handling for failed loads
img.onerror = () => {
console.warn(`Failed to load emoji: ${name}`);
img.style.display = 'none';
};
img.onclick = (ev) => { img.onclick = (ev) => {
ev.stopPropagation(); ev.stopPropagation();
textarea.value += ` :${name}: `; textarea.value += ` :${name}: `;
@@ -672,15 +718,17 @@ class CommentSystem {
picker.innerHTML = '<div style="padding:5px;color:white;font-size:0.8em;">No emojis found</div>'; picker.innerHTML = '<div style="padding:5px;color:white;font-size:0.8em;">No emojis found</div>';
} }
const closeHandler = (ev) => { trigger.after(picker);
// Set up close handler
closeHandler = (ev) => {
if (!picker.contains(ev.target) && ev.target !== trigger) { if (!picker.contains(ev.target) && ev.target !== trigger) {
picker.remove(); picker.style.display = 'none';
document.removeEventListener('click', closeHandler); document.removeEventListener('click', closeHandler);
closeHandler = null;
} }
}; };
setTimeout(() => document.addEventListener('click', closeHandler), 0); setTimeout(() => document.addEventListener('click', closeHandler), 0);
trigger.after(picker);
}); });
} }
} }