published version in webstore

This commit is contained in:
dwindown
2025-09-06 23:58:42 +07:00
parent a21f9927e4
commit 6b1efab615
11 changed files with 619 additions and 136 deletions

View File

@@ -6,6 +6,16 @@ if (window.__dewemoji_cs_installed) {
window.__dewemoji_cs_installed = true;
// (keep the rest of your file below as-is)
// Throttle to animation frame to avoid excessive work on rapid events
function rafThrottle(fn){
let scheduled = false;
return function(...args){
if (scheduled) return;
scheduled = true;
requestAnimationFrame(() => { scheduled = false; fn.apply(this,args); });
};
}
let lastEditable = null; // HTMLElement (input/textarea/contenteditable root)
let lastRange = null; // Range for contenteditable
let lastStart = 0, lastEnd = 0;
@@ -59,10 +69,17 @@ if (window.__dewemoji_cs_installed) {
captureCaret();
// Use a non-throttled handler for focusin so we snapshot *before* focus leaves to the side panel.
document.addEventListener('focusin', captureCaret, true);
document.addEventListener('keyup', captureCaret, true);
document.addEventListener('mouseup', captureCaret, true);
document.addEventListener('selectionchange', captureCaret, true);
// Throttled handlers for noisy updates
const captureCaretThrottled = rafThrottle(captureCaret);
document.addEventListener('keyup', captureCaretThrottled, true);
document.addEventListener('mouseup', captureCaretThrottled, true);
document.addEventListener('selectionchange', captureCaretThrottled, true);
// Extra safety: when the page is about to hide (e.g., side panel opens), keep the last known caret
document.addEventListener('visibilitychange', () => { if (document.visibilityState === 'hidden') captureCaret(); }, true);
// Attempt to insert text at the last saved position
function insertAtCaret(text) {