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