You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2025/03/06 10:28:16 UTC

(causeway) branch main updated: CAUSEWAY-3862: adds (Drag &) Drop Support on Text Input

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/main by this push:
     new a0fc455e74d CAUSEWAY-3862: adds (Drag &) Drop Support on Text Input
a0fc455e74d is described below

commit a0fc455e74daa158df8e3b3f8936e4020e93311b
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Mar 6 11:28:11 2025 +0100

    CAUSEWAY-3862: adds (Drag &) Drop Support on Text Input
---
 .../attributes/AttributePanelWithFormField.html    |  9 ++++--
 .../CausewayWicketViewerJsResourceReference.java   |  2 +-
 ...ess.js => causeway-wicket-viewer.nocompress.js} | 32 ++++++++++++++++++++++
 3 files changed, 40 insertions(+), 3 deletions(-)

diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/AttributePanelWithFormField.html b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/AttributePanelWithFormField.html
index 6f51d4cb395..882da80782d 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/AttributePanelWithFormField.html
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/AttributePanelWithFormField.html
@@ -66,7 +66,9 @@
 		<wicket:fragment wicket:id="fragment-fieldFrame-withLink">
 			<span class="scalarValueInput input-group fragment-fieldFrame-withLink">
 				<div wicket:id="scalarValueInlinePromptLink"
-					class="scalarValueInlinePromptLink">
+					class="scalarValueInlinePromptLink"
+                    ondragover="scalarValueAllowDrop(event)"
+                    ondrop="scalarValueDrop(event)">
 					<!-- output format -->
 					<wicket:container
 						wicket:id="container-scalarValue"
@@ -127,7 +129,10 @@
 		<wicket:fragment wicket:id="fragment-input-text">
 			<input wicket:id="scalarValue"
 				type="text" name="scalarValue"
-				class="form-control form-control-sm scalarValue fragment-input-text"/>
+				class="form-control form-control-sm scalarValue fragment-input-text"
+                ondragover="scalarValueAllowDrop(event)"
+                ondrop="scalarValueDrop(event)"
+                />
 		</wicket:fragment>
 
 		<wicket:fragment wicket:id="fragment-input-textarea">
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/common/viewer/js/CausewayWicketViewerJsResourceReference.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/common/viewer/js/CausewayWicketViewerJsResourceReference.java
index 462c660d95f..f4b4dc4160e 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/common/viewer/js/CausewayWicketViewerJsResourceReference.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/common/viewer/js/CausewayWicketViewerJsResourceReference.java
@@ -40,7 +40,7 @@ public class CausewayWicketViewerJsResourceReference
     public CausewayWicketViewerJsResourceReference() {
         super(WktHeaderItems.forScriptReference(
                 CausewayWicketViewerJsResourceReference.class,
-                "causeway-jquery-wicket-viewer.nocompress.js"));
+                "causeway-wicket-viewer.nocompress.js"));
     }
 
     public static HeaderItem asHeaderItem() {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/common/viewer/js/causeway-jquery-wicket-viewer.nocompress.js b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/common/viewer/js/causeway-wicket-viewer.nocompress.js
similarity index 89%
rename from viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/common/viewer/js/causeway-jquery-wicket-viewer.nocompress.js
rename to viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/common/viewer/js/causeway-wicket-viewer.nocompress.js
index 16a46990e25..2aa9620ccf0 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/common/viewer/js/causeway-jquery-wicket-viewer.nocompress.js
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/common/viewer/js/causeway-wicket-viewer.nocompress.js
@@ -304,3 +304,35 @@ $(function() {
     })
 });
 
+/**
+ * (drag &) drop support on text style input elements
+ */
+function scalarValueAllowDrop(ev) { ev.preventDefault(); }
+function scalarValueDrop(ev) {
+  ev.preventDefault();
+  const data = ev.dataTransfer.getData("text");
+  console.log("event: " + data);
+  if(ev.target.tagName === 'INPUT') {
+    const inputElement = ev.target;
+    inputElement.value = data;
+  } else {
+    // the ev.target element will be replaced after the click below, so we need to anchor ourselfs up the DOM hierarchy
+    const anchor = ev.target.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement;
+
+    // before we emulate the click (below), we install an observer to listen on the server sent dom update
+    new MutationObserver((mutationsList, observer) => {
+      mutationsList.forEach(mutation => {
+        observer.disconnect();
+        if (mutation.type === 'childList') {
+          const inputElement = anchor.querySelector('input[type="text"].fragment-input-text')
+          if(inputElement!=null) {
+              inputElement.value = data;
+          }
+        }
+      });
+    })
+    .observe(anchor, { childList: true, attributes: false, subtree: true });
+    
+    ev.target.click();
+  }
+}