fix: lock stored selection during modal - prevents mouseup from resetting on Replace click
Some checks failed
CI — Test & Build / Test & Build (push) Failing after 44s
Some checks failed
CI — Test & Build / Test & Build (push) Failing after 44s
This commit is contained in:
@@ -16,9 +16,13 @@ export default defineContentScript({
|
|||||||
let storedElement: HTMLTextAreaElement | HTMLInputElement | null = null;
|
let storedElement: HTMLTextAreaElement | HTMLInputElement | null = null;
|
||||||
let storedRange: Range | null = null;
|
let storedRange: Range | null = null;
|
||||||
|
|
||||||
|
// Lock flag — prevents mouseup from resetting stored selection while modal is open
|
||||||
|
let selectionLocked = false;
|
||||||
|
|
||||||
// ─── Selection capture (called immediately on mouseup) ────────────────────
|
// ─── Selection capture (called immediately on mouseup) ────────────────────
|
||||||
|
|
||||||
function captureSelectionNow(): boolean {
|
function captureSelectionNow(): boolean {
|
||||||
|
if (selectionLocked) return true; // selection is locked — don't reset
|
||||||
const el = document.activeElement;
|
const el = document.activeElement;
|
||||||
|
|
||||||
// 1) textarea / input — grab positions while they're still valid
|
// 1) textarea / input — grab positions while they're still valid
|
||||||
@@ -247,6 +251,7 @@ export default defineContentScript({
|
|||||||
async function runAction(action: string) {
|
async function runAction(action: string) {
|
||||||
if (!selectedText) return;
|
if (!selectedText) return;
|
||||||
const textToProcess = selectedText;
|
const textToProcess = selectedText;
|
||||||
|
selectionLocked = true; // lock stored selection — modal interaction won't reset it
|
||||||
|
|
||||||
// Guard: extension may have been reloaded/updated
|
// Guard: extension may have been reloaded/updated
|
||||||
if (!isExtensionValid()) {
|
if (!isExtensionValid()) {
|
||||||
@@ -404,6 +409,7 @@ export default defineContentScript({
|
|||||||
replaceBtn.addEventListener('mousedown', (e) => e.preventDefault()); // keep stored selection intact
|
replaceBtn.addEventListener('mousedown', (e) => e.preventDefault()); // keep stored selection intact
|
||||||
replaceBtn.addEventListener('click', () => {
|
replaceBtn.addEventListener('click', () => {
|
||||||
replaceText(resultText);
|
replaceText(resultText);
|
||||||
|
selectionLocked = false; // unlock after replace
|
||||||
overlay.remove();
|
overlay.remove();
|
||||||
modal!.remove();
|
modal!.remove();
|
||||||
modal = null;
|
modal = null;
|
||||||
@@ -443,6 +449,7 @@ export default defineContentScript({
|
|||||||
cursor: 'pointer',
|
cursor: 'pointer',
|
||||||
});
|
});
|
||||||
dismissBtn.addEventListener('click', () => {
|
dismissBtn.addEventListener('click', () => {
|
||||||
|
selectionLocked = false; // unlock on dismiss
|
||||||
overlay.remove();
|
overlay.remove();
|
||||||
modal!.remove();
|
modal!.remove();
|
||||||
modal = null;
|
modal = null;
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user