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

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

commit 51fc13ea0b7e00ca50c67b4f183c9eb76e117683
Author: Andi Huber <[email protected]>
AuthorDate: Thu Sep 18 09:59:04 2025 +0200

    CAUSEWAY-3889: fine-grained imageIcon CSS control
---
 .../object/icontitle/ObjectIconAndTitlePanel.html  |  2 +-
 .../object/icontitle/ObjectIconAndTitlePanel.java  | 23 +++++++++++++++-------
 .../bootstrap/css/bootstrap-overrides-all-v2.css   | 15 +++++++++-----
 3 files changed, 27 insertions(+), 13 deletions(-)

diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/object/icontitle/ObjectIconAndTitlePanel.html
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/object/icontitle/ObjectIconAndTitlePanel.html
index 7b2d989a8de..63fb3a1d88e 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/object/icontitle/ObjectIconAndTitlePanel.html
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/object/icontitle/ObjectIconAndTitlePanel.html
@@ -23,7 +23,7 @@
              <span wicket:id="objectLinkWrapper" 
class="objectIconAndTitlePanel objectIconAndTitleComponentType">
                  <a href="#" wicket:id="objectLink" class="objectUrlSource">
                      <span wicket:id="objectIconFaLeft"></span>
-                     <img wicket:id="objectImage" class="objectImage"/>
+                     <img wicket:id="objectIcon"/>
                      <span wicket:id="objectTitle" 
class="objectTitle">[title]</span>
                      <span wicket:id="objectIconFaRight"></span>
                  </a>
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/object/icontitle/ObjectIconAndTitlePanel.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/object/icontitle/ObjectIconAndTitlePanel.java
index 0fd4cd24784..2858a7a1a77 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/object/icontitle/ObjectIconAndTitlePanel.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/object/icontitle/ObjectIconAndTitlePanel.java
@@ -46,6 +46,8 @@
 
 import lombok.Builder;
 
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.behavior.CssClassNameModifier;
+
 /**
  * {@link PanelAbstract Panel} representing the icon and title of an entity,
  * as per the provided {@link UiObjectWkt}.
@@ -60,7 +62,7 @@ class ObjectIconAndTitlePanel
     private static final String ID_OBJECT_FONT_AWESOME_RIGHT = 
"objectIconFaRight";
     private static final String ID_OBJECT_LINK = "objectLink";
     private static final String ID_OBJECT_TITLE = "objectTitle";
-    private static final String ID_OBJECT_ICON = "objectImage";
+    private static final String ID_OBJECT_ICON = "objectIcon";
 
     private IconWhere iconWhere;
 
@@ -124,15 +126,16 @@ private AbstractLink createLinkWithIconAndTitle(IconWhere 
iconWhere) {
                 iconWhere,
                 iconUrlBased->{
                     Wkt.imageAddCachable(link, ID_OBJECT_ICON,
-                        
getImageResourceCache().resourceReferenceForObjectIcon(iconUrlBased));
+                        
getImageResourceCache().resourceReferenceForObjectIcon(iconUrlBased))
+                        .add(cssClassNameModifier("objectIcon", iconWhere));
                     WktComponents.permanentlyHide(link, 
ID_OBJECT_FONT_AWESOME_LEFT);
                     WktComponents.permanentlyHide(link, 
ID_OBJECT_FONT_AWESOME_RIGHT);
                 },
                 iconEmbedded->{
-                    // for embedded images we replace the default CSS class 
'objectImage' w/ 'objectImageEmbedded'
+                    // for embedded images we use CSS class 
'objectIconEmbedded' (instead of 'objectIcon')
                     // which allows to render them differently e.g. don't 
constrain image sizes, as these should be driven by embedded data
-                    var img = Wkt.imageAddEmbedded(link, ID_OBJECT_ICON, 
iconEmbedded.dataUri());
-                    Wkt.attributeReplace(img, "class", "objectImageEmbedded");
+                    Wkt.imageAddEmbedded(link, ID_OBJECT_ICON, 
iconEmbedded.dataUri())
+                        .add(cssClassNameModifier("objectIconEmbedded", 
iconWhere));
                     WktComponents.permanentlyHide(link, 
ID_OBJECT_FONT_AWESOME_LEFT);
                     WktComponents.permanentlyHide(link, 
ID_OBJECT_FONT_AWESOME_RIGHT);
                 },
@@ -140,11 +143,13 @@ private AbstractLink createLinkWithIconAndTitle(IconWhere 
iconWhere) {
                     var faLayers = iconFa.fontAwesomeLayers();
                     WktComponents.permanentlyHide(link, ID_OBJECT_ICON);
                     
if(CssClassFaPosition.isLeftOrUnspecified(faLayers.position())) {
-                        Wkt.faIconLayersAdd(link, ID_OBJECT_FONT_AWESOME_LEFT, 
faLayers);
+                        Wkt.faIconLayersAdd(link, ID_OBJECT_FONT_AWESOME_LEFT, 
faLayers)
+                            .add(cssClassNameModifier("objectIconFa", 
iconWhere));
                         WktComponents.permanentlyHide(link, 
ID_OBJECT_FONT_AWESOME_RIGHT);
                     } else {
                         WktComponents.permanentlyHide(link, 
ID_OBJECT_FONT_AWESOME_LEFT);
-                        Wkt.faIconLayersAdd(link, 
ID_OBJECT_FONT_AWESOME_RIGHT, faLayers);
+                        Wkt.faIconLayersAdd(link, 
ID_OBJECT_FONT_AWESOME_RIGHT, faLayers)
+                            .add(cssClassNameModifier("objectIconFa", 
iconWhere));
                     }
                 });
 
@@ -166,6 +171,10 @@ private AbstractLink createLinkWithIconAndTitle(IconWhere 
iconWhere) {
         return link;
     }
 
+    private CssClassNameModifier cssClassNameModifier(String primaryCssClass, 
IconWhere iconWhere) {
+        return new CssClassNameModifier(primaryCssClass, primaryCssClass + "-" 
+ iconWhere.name().toLowerCase());
+    }
+
     private boolean isTitleSuppressed() {
         return getModel().isInlinePrompt()
                 //XXX CAUSEWAY-1699 never hide titles of object references in 
tables
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/common/bootstrap/css/bootstrap-overrides-all-v2.css
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/common/bootstrap/css/bootstrap-overrides-all-v2.css
index 69261621df0..fff69797f23 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/common/bootstrap/css/bootstrap-overrides-all-v2.css
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/common/bootstrap/css/bootstrap-overrides-all-v2.css
@@ -171,19 +171,24 @@ footer > .navbar {
     margin: 0;
 }
 
-/* from ActionPromptHeaderPanel */
+/* from ObjectIconAndTitlePanel */
 
-.objectIconAndTitlePanel img.objectIcon {
-    width: 24px;
-    height: 24px;
+.objectIconAndTitlePanel img.objectIcon-object_header {
+    max-width: 2rem;
+    max-height: 2rem;
+}
+.objectIconAndTitlePanel img.objectIcon-table_row {
+    max-width: 1.5rem;
+    max-height: 1.5rem;
 }
 
+/* from ActionPromptHeaderPanel */
+
 .objectIconAndTitlePanel span.actionName {
     font-size: 20px;
     font-weight: bolder;
 }
 
-
 /* from SimpleClipboardPanel */
 
 .simpleClipboardPanel form {

Reply via email to