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 a901d07df41 CAUSEWAY-3950: allows specific mime types to be excluded 
from file upload preview
a901d07df41 is described below

commit a901d07df41dce06b2129fd8e73196830db626da
Author: andi-huber <[email protected]>
AuthorDate: Sun Jan 18 19:37:44 2026 +0100

    CAUSEWAY-3950: allows specific mime types to be excluded from file
    upload preview
---
 .../core/config/CausewayConfiguration.java         | 27 ++++++++++++++
 .../blobclob/BlobOrClobAttributePanel.java         |  2 +-
 .../attributes/image/ImageAttributePanel.java      |  2 +-
 .../apache/causeway/viewer/wicket/ui/util/Wkt.java | 43 +++++++++++++++++-----
 4 files changed, 62 insertions(+), 12 deletions(-)

diff --git 
a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
 
b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
index 96451e1b715..ce719995e52 100644
--- 
a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
+++ 
b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
@@ -3021,6 +3021,8 @@ public record Wicket(
             @DefaultValue
             DevelopmentUtilities developmentUtilities,
             @DefaultValue
+            FileUpload fileUpload,
+            @DefaultValue
             RememberMe rememberMe,
             @DefaultValue
             Themes themes,
@@ -3165,6 +3167,31 @@ public record DevelopmentUtilities(
                 @DefaultValue("false")
                 boolean enable) {
             }
+            
+            public record FileUpload(
+                    /**
+                     * If left empty, the default allows ['image', 'html', 
'text', 'video', 'audio', 'flash', 'object'], 
+                     * where 'object' enables fallback behavior. We remove 
this here.
+                     *  
+                     * @see 
https://plugins.krajee.com/file-input/plugin-options#disabledPreviewTypes
+                     */
+                    @DefaultValue({"object"})
+                    List<String> disabledPreviewTypes,
+                       /**
+                        * Some mime types can trigger unwanted download 
behavior, dependent on browser and or OS settings.
+                        * 
+                        * <p>We have seen CSV files causing issues, so we 
disallow those by default.
+                        * 
+                        * @see 
https://plugins.krajee.com/file-input/plugin-options#disabledPreviewMimeTypes
+                        */
+                       @DefaultValue({"text/csv"})
+                    List<String> disabledPreviewMimeTypes,
+                               /**
+                                * If <code>false</code> disables the file 
upload preview frame entirely.
+                                */
+                       @DefaultValue("true")
+                               boolean showPreview) {
+            }
 
             public record RememberMe(
                 /**
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/blobclob/BlobOrClobAttributePanel.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/blobclob/BlobOrClobAttributePanel.java
index 48cdee5255b..d376a4d04e0 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/blobclob/BlobOrClobAttributePanel.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/blobclob/BlobOrClobAttributePanel.java
@@ -62,7 +62,7 @@ protected Optional<InputFragment> getInputFragmentType() {
     @Override
     protected FormComponent createFormComponent(final String id, final 
UiAttributeWkt attributeModel) {
         var initialCaption = outputFormatAsString();
-        var fileUploadField = Wkt.fileUploadField(id, initialCaption, 
fileUploadModel());
+        var fileUploadField = Wkt.fileUploadField(id, initialCaption, 
getWicketViewerSettings(), fileUploadModel());
         addAcceptFilterTo(fileUploadField);
         return fileUploadField;
     }
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/image/ImageAttributePanel.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/image/ImageAttributePanel.java
index 35fb43059b0..a7e25d840e6 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/image/ImageAttributePanel.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/image/ImageAttributePanel.java
@@ -63,7 +63,7 @@ protected Optional<InputFragment> getInputFragmentType() {
     @Override
     protected FormComponent createFormComponent(final String id, final 
UiAttributeWkt attributeModel) {
         var initialCaption = outputFormatAsString();
-        var fileUploadField = Wkt.fileUploadField(id, initialCaption, 
fileUploadModel());
+        var fileUploadField = Wkt.fileUploadField(id, initialCaption, 
getWicketViewerSettings(), fileUploadModel());
         addAcceptFilterTo(fileUploadField);
         return fileUploadField;
     }
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/util/Wkt.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/util/Wkt.java
index dad69921a00..33ae6f9f060 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/util/Wkt.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/util/Wkt.java
@@ -137,6 +137,7 @@
 import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.form.checkboxx.CheckBoxXConfig;
 import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.form.checkboxx.CheckBoxXConfig.Sizes;
 import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.form.fileinput.FileInputConfig;
+import de.agilecoders.wicket.jquery.IKey;
 import de.agilecoders.wicket.jquery.Key;
 
 /**
@@ -703,22 +704,44 @@ private FileResourceStream fileResourceStream(final File 
file, final CommonMimeT
     public FileUploadField fileUploadField(
             final String id,
             final String initialCaption,
+            final Wicket settings,
             final IModel<List<FileUpload>> model) {
         var fileUploadField = new FileUploadFieldWithNestingFix(
                 id,
                 model,
-                new FileInputConfig()
-                    .maxFileCount(1)
-                    .mainClass("input-group-sm")
-                    .initialCaption(initialCaption)
-                    .captionClass("form-control-sm")
-                    .showUpload(false)
-                    //[CAUSEWAY-3950] preview may trigger unwanted downloads 
of the file that just got uploaded
-                    // we were seeing this with Chrome browser and files of 
type CSV
-                    .showPreview(false)
-                    );
+                createFileInputConfig(initialCaption, settings.fileUpload()));
         return fileUploadField;
     }
+    
+    /**
+     * @see https://plugins.krajee.com/file-input/plugin-options
+     */
+    static final class FileInputConfigWithPreviewControl extends 
FileInputConfig {
+               private static final long serialVersionUID = 1L;
+           static final IKey<List<String>> DisabledPreviewTypes = 
newKey("disabledPreviewTypes", null);
+           static final IKey<List<String>> DisabledPreviewMimeTypes = 
newKey("disabledPreviewMimeTypes", null);
+           
+           public FileInputConfigWithPreviewControl 
disabledPreviewTypes(List<String> disabledPreviewTypes) {
+               put(DisabledPreviewTypes, disabledPreviewTypes);
+               return this;
+           }
+           public FileInputConfigWithPreviewControl 
disabledPreviewMimeTypes(List<String> disabledPreviewMimeTypes) {
+               put(DisabledPreviewMimeTypes, disabledPreviewMimeTypes);
+               return this;
+           }
+    }
+    
+    private FileInputConfig createFileInputConfig(final String initialCaption, 
final Wicket.FileUpload fileUploadSettings) {
+       return new FileInputConfigWithPreviewControl()
+                       
.disabledPreviewTypes(fileUploadSettings.disabledPreviewTypes())
+                       
.disabledPreviewMimeTypes(fileUploadSettings.disabledPreviewMimeTypes())
+                .maxFileCount(1)
+                .mainClass("input-group-sm")
+                .initialCaption(initialCaption)
+                .captionClass("form-control-sm")
+                .showUpload(false)
+                .showPreview(fileUploadSettings.showPreview());
+    }
 
     // -- FONT AWESOME
 

Reply via email to