From 5f999b4d757acc4fd6399bd5aa30ffa197848738 Mon Sep 17 00:00:00 2001 From: Leon Zandman Date: Sat, 21 Mar 2026 13:48:13 +0100 Subject: [PATCH 1/3] Fix: Improve drag-and-drop handling for operations in Safari --- src/web/waiters/OperationsWaiter.mjs | 3 ++- src/web/waiters/RecipeWaiter.mjs | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/web/waiters/OperationsWaiter.mjs b/src/web/waiters/OperationsWaiter.mjs index 45a40c82fb..41c7452c25 100755 --- a/src/web/waiters/OperationsWaiter.mjs +++ b/src/web/waiters/OperationsWaiter.mjs @@ -183,10 +183,11 @@ class OperationsWaiter { * @param {Element} el - The element to start selecting from */ enableOpsListPopovers(el) { + const self = this; $(el).find("[data-toggle=popover]").addBack("[data-toggle=popover]") .popover({trigger: "manual"}) .on("mouseenter", function(e) { - if (e.buttons > 0) return; // Mouse button held down - likely dragging an operation + if (e.buttons > 0 || self.manager.recipe.dragInProgress) return; // Mouse button held down - likely dragging an operation const _this = this; $(this).popover("show"); $(".popover").on("mouseleave", function () { diff --git a/src/web/waiters/RecipeWaiter.mjs b/src/web/waiters/RecipeWaiter.mjs index 93ca11821e..eb26b97c65 100755 --- a/src/web/waiters/RecipeWaiter.mjs +++ b/src/web/waiters/RecipeWaiter.mjs @@ -26,6 +26,7 @@ class RecipeWaiter { this.app = app; this.manager = manager; this.removeIntent = false; + this.dragInProgress = false; } @@ -88,6 +89,7 @@ class RecipeWaiter { * @param {element} listEl - The list to initialise */ createSortableSeedList(listEl) { + const self = this; Sortable.create(listEl, { group: { name: "recipe", @@ -99,6 +101,7 @@ class RecipeWaiter { dataTransfer.setData("Text", dragEl.textContent); }, onStart: function(evt) { + self.dragInProgress = true; // Removes popover element and event bindings from the dragged operation but not the // event bindings from the one left in the operations list. Without manually removing // these bindings, we cannot re-initialise the popover on the stub operation. @@ -126,6 +129,7 @@ class RecipeWaiter { * @param {event} evt */ opSortEnd(evt) { + this.dragInProgress = false; if (this.removeIntent && evt.item.parentNode.id === "rec-list") { evt.item.remove(); return; From 2ddc79835e64cf0ef0cf05282f7bd89b4e17bb9b Mon Sep 17 00:00:00 2001 From: Leon Zandman Date: Sat, 21 Mar 2026 16:29:52 +0100 Subject: [PATCH 2/3] Browser-agnostic fix for dragging Operations to Favorites, so this also works on Safari. --- src/web/waiters/RecipeWaiter.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/waiters/RecipeWaiter.mjs b/src/web/waiters/RecipeWaiter.mjs index 704a38231a..4e517e32f4 100755 --- a/src/web/waiters/RecipeWaiter.mjs +++ b/src/web/waiters/RecipeWaiter.mjs @@ -163,7 +163,7 @@ class RecipeWaiter { * @param {event} e */ favDragover(e) { - if (e.dataTransfer.effectAllowed !== "move") + if (!this.dragInProgress) return false; e.stopPropagation(); From c66ab5a5ddecdb379d9a1029311d0dbdd0767928 Mon Sep 17 00:00:00 2001 From: Leon Zandman Date: Sat, 21 Mar 2026 16:38:25 +0100 Subject: [PATCH 3/3] Fix: Update drag-and-drop handling to use 'dragInProgress' flag instead of 'effectAllowed' in InputWaiter and RecipeWaiter --- src/web/waiters/InputWaiter.mjs | 4 ++-- src/web/waiters/RecipeWaiter.mjs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/web/waiters/InputWaiter.mjs b/src/web/waiters/InputWaiter.mjs index 94663a0b2e..ab9b5b7496 100644 --- a/src/web/waiters/InputWaiter.mjs +++ b/src/web/waiters/InputWaiter.mjs @@ -988,7 +988,7 @@ class InputWaiter { */ inputDragover(e) { // This will be set if we're dragging an operation - if (e.dataTransfer.effectAllowed === "move") + if (this.manager.recipe.dragInProgress) return false; e.stopPropagation(); @@ -1021,7 +1021,7 @@ class InputWaiter { */ async inputDrop(e) { // This will be set if we're dragging an operation - if (e.dataTransfer.effectAllowed === "move") + if (this.manager.recipe.dragInProgress) return false; e.stopPropagation(); diff --git a/src/web/waiters/RecipeWaiter.mjs b/src/web/waiters/RecipeWaiter.mjs index 4e517e32f4..fe301abe78 100755 --- a/src/web/waiters/RecipeWaiter.mjs +++ b/src/web/waiters/RecipeWaiter.mjs @@ -538,7 +538,7 @@ class RecipeWaiter { */ textArgDragover (e) { // This will be set if we're dragging an operation - if (e.dataTransfer.effectAllowed === "move") + if (this.dragInProgress) return false; e.stopPropagation(); @@ -568,7 +568,7 @@ class RecipeWaiter { */ textArgDrop(e) { // This will be set if we're dragging an operation - if (e.dataTransfer.effectAllowed === "move") + if (this.dragInProgress) return false; e.stopPropagation();