Skip to content

Commit fc287dc

Browse files
committed
fix: element getting dragged when trying to select text while editing
1 parent c7bdb49 commit fc287dc

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

src/extensionsIntegrated/phoenix-pro/browser-context/dragAndDrop.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1023,6 +1023,13 @@ function clearDropMarkers() {
10231023
// ============================ DRAG-DROP EVENT HANDLERS FOR HTML ELEMENTS ============================
10241024

10251025
function onDragStart(event, element) {
1026+
// if the element is currently being edited then we don't want drag to operate
1027+
if (SHARED_STATE._currentlyEditingElement === element) {
1028+
event.preventDefault();
1029+
event.stopPropagation();
1030+
return;
1031+
}
1032+
10261033
event.stopPropagation();
10271034
event.dataTransfer.setData("text/plain", element.getAttribute(DATA_BRACKETS_ID_ATTR));
10281035
SHARED_STATE._dragStartX = event.clientX;
@@ -1341,7 +1348,10 @@ function registerDragDropForElement(element) {
13411348
element.removeEventListener("dragend", element._dragEndHandler);
13421349
}
13431350

1344-
element.setAttribute("draggable", "true");
1351+
if (SHARED_STATE._currentlyEditingElement !== element) {
1352+
element.setAttribute("draggable", "true");
1353+
}
1354+
13451355
element._dragStartHandler = (event) => { onDragStart(event, element); };
13461356
element._dragEndHandler = (event) => { onDragEnd(event, element); };
13471357
element.addEventListener("dragstart", element._dragStartHandler);

src/extensionsIntegrated/phoenix-pro/browser-context/text-edit.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Copyright (c) 2021 - present core.ai
33
* SPDX-License-Identifier: LicenseRef-Proprietary
44
*/
5-
/*global GLOBALS, LivePreviewView, dismissUIAndCleanupState, customReturns, proConstants, strings, icons*/
5+
/*global GLOBALS, LivePreviewView, dismissUIAndCleanupState, customReturns, proConstants, strings, icons, SHARED_STATE*/
66

77
// we store references to interaction blocker event handlers so we can remove them when switching modes
88
let _interactionBlockerHandlers = null;
@@ -97,6 +97,14 @@ function registerInteractionBlocker() {
9797
return;
9898
}
9999

100+
// allow clicks within the element that user is currently editing
101+
// this is done to prevent the interaction blocker from interfering with text editing
102+
if (SHARED_STATE._currentlyEditingElement &&
103+
(SHARED_STATE._currentlyEditingElement === element ||
104+
SHARED_STATE._currentlyEditingElement.contains(element))) {
105+
return;
106+
}
107+
100108
// BLOCK: Kill all user page interactions in edit mode
101109
event.preventDefault();
102110
event.stopImmediatePropagation();
@@ -232,8 +240,9 @@ function startEditing(element) {
232240
return;
233241
}
234242

235-
// Make the element editable
243+
SHARED_STATE._currentlyEditingElement = element;
236244
element.setAttribute("contenteditable", "true");
245+
element.setAttribute("draggable", "false");
237246
element.focus();
238247
// to compare with the new text content, if same we don't make any changes in the editor area
239248
const oldContent = element.textContent;
@@ -321,8 +330,9 @@ function finishEditingCleanup(element) {
321330
return;
322331
}
323332

324-
// Remove contenteditable attribute
333+
SHARED_STATE._currentlyEditingElement = null;
325334
element.removeAttribute("contenteditable");
335+
element.removeAttribute("draggable");
326336
dismissUIAndCleanupState();
327337

328338
// Remove event listeners

0 commit comments

Comments
 (0)