published version in webstore
This commit is contained in:
23
content.js
23
content.js
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user