fix(ena-planner): harden send interception during planning
This commit is contained in:
@@ -77,7 +77,9 @@ let overlay = null;
|
|||||||
let iframeMessageBound = false;
|
let iframeMessageBound = false;
|
||||||
let sendListenersInstalled = false;
|
let sendListenersInstalled = false;
|
||||||
let sendClickHandler = null;
|
let sendClickHandler = null;
|
||||||
|
let sendPointerDownHandler = null;
|
||||||
let sendKeydownHandler = null;
|
let sendKeydownHandler = null;
|
||||||
|
let sendKeyupHandler = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* -------------------------
|
* -------------------------
|
||||||
@@ -1319,10 +1321,29 @@ async function doInterceptAndPlanThenSend() {
|
|||||||
|
|
||||||
function installSendInterceptors() {
|
function installSendInterceptors() {
|
||||||
if (sendListenersInstalled) return;
|
if (sendListenersInstalled) return;
|
||||||
|
sendPointerDownHandler = (e) => {
|
||||||
|
const btn = getSendButton();
|
||||||
|
if (!btn) return;
|
||||||
|
if (e.target !== btn && !btn.contains(e.target)) return;
|
||||||
|
if (state.isPlanning) {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopImmediatePropagation();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!shouldInterceptNow()) return;
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopImmediatePropagation();
|
||||||
|
doInterceptAndPlanThenSend().catch(err => toastErr(String(err?.message ?? err)));
|
||||||
|
};
|
||||||
sendClickHandler = (e) => {
|
sendClickHandler = (e) => {
|
||||||
const btn = getSendButton();
|
const btn = getSendButton();
|
||||||
if (!btn) return;
|
if (!btn) return;
|
||||||
if (e.target !== btn && !btn.contains(e.target)) return;
|
if (e.target !== btn && !btn.contains(e.target)) return;
|
||||||
|
if (state.isPlanning) {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopImmediatePropagation();
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!shouldInterceptNow()) return;
|
if (!shouldInterceptNow()) return;
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopImmediatePropagation();
|
e.stopImmediatePropagation();
|
||||||
@@ -1338,17 +1359,31 @@ function installSendInterceptors() {
|
|||||||
doInterceptAndPlanThenSend().catch(err => toastErr(String(err?.message ?? err)));
|
doInterceptAndPlanThenSend().catch(err => toastErr(String(err?.message ?? err)));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
sendKeyupHandler = (e) => {
|
||||||
|
const ta = getSendTextarea();
|
||||||
|
if (!ta || e.target !== ta) return;
|
||||||
|
if (e.key !== 'Enter' || e.shiftKey) return;
|
||||||
|
if (!state.isPlanning) return;
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopImmediatePropagation();
|
||||||
|
};
|
||||||
|
document.addEventListener('pointerdown', sendPointerDownHandler, true);
|
||||||
document.addEventListener('click', sendClickHandler, true);
|
document.addEventListener('click', sendClickHandler, true);
|
||||||
document.addEventListener('keydown', sendKeydownHandler, true);
|
document.addEventListener('keydown', sendKeydownHandler, true);
|
||||||
|
document.addEventListener('keyup', sendKeyupHandler, true);
|
||||||
sendListenersInstalled = true;
|
sendListenersInstalled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function uninstallSendInterceptors() {
|
function uninstallSendInterceptors() {
|
||||||
if (!sendListenersInstalled) return;
|
if (!sendListenersInstalled) return;
|
||||||
|
if (sendPointerDownHandler) document.removeEventListener('pointerdown', sendPointerDownHandler, true);
|
||||||
if (sendClickHandler) document.removeEventListener('click', sendClickHandler, true);
|
if (sendClickHandler) document.removeEventListener('click', sendClickHandler, true);
|
||||||
if (sendKeydownHandler) document.removeEventListener('keydown', sendKeydownHandler, true);
|
if (sendKeydownHandler) document.removeEventListener('keydown', sendKeydownHandler, true);
|
||||||
|
if (sendKeyupHandler) document.removeEventListener('keyup', sendKeyupHandler, true);
|
||||||
|
sendPointerDownHandler = null;
|
||||||
sendClickHandler = null;
|
sendClickHandler = null;
|
||||||
sendKeydownHandler = null;
|
sendKeydownHandler = null;
|
||||||
|
sendKeyupHandler = null;
|
||||||
sendListenersInstalled = false;
|
sendListenersInstalled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user