This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch v3
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/v3 by this push:
new 78a44a4532e CAUSEWAY-3950: [v3] allows specific mime types to be
excluded from file upload preview (backport from v4)
78a44a4532e is described below
commit 78a44a4532e484dd821c5416d11f692342929b47
Author: andi-huber <[email protected]>
AuthorDate: Sun Jan 18 19:37:44 2026 +0100
CAUSEWAY-3950: [v3] allows specific mime types to be excluded from file
upload preview (backport from v4)
---
.../core/config/CausewayConfiguration.java | 24 ++++++++++++
.../blobclob/BlobOrClobAttributePanel.java | 2 +-
.../attributes/image/ImageAttributePanel.java | 2 +-
.../apache/causeway/viewer/wicket/ui/util/Wkt.java | 43 +++++++++++++++++-----
4 files changed, 59 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 16ed2ce2b59..a4be80814eb 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
@@ -3390,6 +3390,30 @@ public static class DevelopmentUtilities {
*/
private boolean enable = false;
}
+
+ private final FileUpload fileUpload = new FileUpload();
+ @Data
+ public static class 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
+ */
+ private List<String> disabledPreviewTypes = List.of("object");
+ /**
+ * 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
+ */
+ private List<String> disabledPreviewMimeTypes =
List.of("object");
+ /**
+ * If <code>false</code> disables the file upload preview frame
entirely.
+ */
+ private boolean showPreview = true;
+ }
private final RememberMe rememberMe = new RememberMe();
@Data
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 69c069737c2..d4793457848 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 ea0ff7bec12..164c4138a50 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 8e63caf69ac..bfd38ec5ee7 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
@@ -136,6 +136,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;
/**
@@ -701,22 +702,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.getFileUpload()));
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.getDisabledPreviewTypes())
+
.disabledPreviewMimeTypes(fileUploadSettings.getDisabledPreviewMimeTypes())
+ .maxFileCount(1)
+ .mainClass("input-group-sm")
+ .initialCaption(initialCaption)
+ .captionClass("form-control-sm")
+ .showUpload(false)
+ .showPreview(fileUploadSettings.isShowPreview());
+ }
// -- FONT AWESOME