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

doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git


The following commit(s) were added to refs/heads/master by this push:
     new 44de7978 EMPIREDB-445 TagEncodingHelper: append cssStyleClasses from 
tag and column metadata instead of overwriting
44de7978 is described below

commit 44de7978eac6dacfda314898eb4f3bdadf10496f
Author: Rainer Döbele <[email protected]>
AuthorDate: Mon Nov 4 15:23:57 2024 +0100

    EMPIREDB-445
    TagEncodingHelper: append cssStyleClasses from tag and column metadata 
instead of overwriting
---
 .../empire/jakarta/components/ControlTag.java      |  2 ++
 .../apache/empire/jakarta/components/ValueTag.java |  7 ++++---
 .../empire/jakarta/utils/TagEncodingHelper.java    | 22 ++++++++++++++--------
 .../apache/empire/jsf2/components/ValueTag.java    |  7 ++++---
 .../empire/jsf2/utils/TagEncodingHelper.java       | 22 ++++++++++++++--------
 5 files changed, 38 insertions(+), 22 deletions(-)

diff --git 
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/ControlTag.java
 
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/ControlTag.java
index b754c54a..b6ba78bd 100644
--- 
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/ControlTag.java
+++ 
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/ControlTag.java
@@ -835,6 +835,8 @@ public class ControlTag extends UIInput implements 
NamingContainer
         setValue(null);
         setLocalValueSet(false);
         // Post update
+        if (getChildCount() <= 1)
+            return; // should never come here
         ControlSeparatorComponent inputSepTag = (ControlSeparatorComponent) 
getChildren().get(1);
         this.control.postUpdateModel(inputSepTag, this.inpInfo, context);
     }
diff --git 
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/ValueTag.java
 
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/ValueTag.java
index 77737469..bc57f501 100644
--- 
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/ValueTag.java
+++ 
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/ValueTag.java
@@ -101,12 +101,13 @@ public class ValueTag extends UIOutput // implements 
NamingContainer
         // Map<String, Object> map = getAttributes();
         String tagName = helper.getTagAttributeString("tag");
         String tooltip = 
helper.getValueTooltip(helper.getTagAttributeValue("title"));
-        String styleClass = 
helper.getTagAttributeString(InputControl.CSS_STYLE_CLASS);
-        // Check
+        String styleClass = 
helper.getTagAttributeStringEx(InputControl.CSS_STYLE_CLASS);
+
+        // Check whether tag is required
         if (StringUtils.isNotEmpty(tagName) || 
StringUtils.isNotEmpty(styleClass) || StringUtils.isNotEmpty(tooltip))
         {   // tagname
             if (StringUtils.isEmpty(tagName))
-                tagName="span";
+                tagName = InputControl.HTML_TAG_SPAN;
             // Detect type and additional style
             String addlStyle = null;
             // get style
diff --git 
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/TagEncodingHelper.java
 
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/TagEncodingHelper.java
index 7f0f1f34..f84dc516 100644
--- 
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/TagEncodingHelper.java
+++ 
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/TagEncodingHelper.java
@@ -2017,20 +2017,25 @@ public class TagEncodingHelper implements 
NamingContainer
         boolean useControlTagOverride = (isCssStyleClass && (this.component 
instanceof ControlTag) && isControlTagElementValid());
         Object value = getTagAttributeValue((useControlTagOverride ? 
"inputClass" : name));
 
-        // Special append with leading '+' (for StyleClass only)
-        boolean append = isCssStyleClass && (value instanceof String) && 
((String)value).length()>0 && ((String)value).charAt(0)=='+';
-        if (append)
-            value = ((String)value).substring(1); // remove leadng '+'
+        // Special "styleClass" append column attribute unless leading '-'
+        boolean append = false;
+        if (isCssStyleClass && (value instanceof String) && 
((String)value).length()>0)
+        {   // if value starts with '!' then do not append but replace
+            if (((String)value).charAt(0)=='!')
+                value = ((String)value).substring(1); // remove leadng '!'
+            else if (((String)value).equals("-"))
+                return null; // omit, if value is '-'
+            else
+                append = true; // append (default)
+        }
         
-        // Get column style
+        // Get column attribute
         if ((value==null || append) && hasColumn())
         {   // Check Column
             Object colValue = column.getAttribute(name);
             if (append) 
             {   // append styles
-                if (ObjectUtils.isEmpty(value))
-                    value = colValue;
-                else if (ObjectUtils.isNotEmpty(colValue))
+                if (ObjectUtils.isNotEmpty(colValue) && 
!colValue.equals(value))
                     value = StringUtils.concat(colValue.toString(), " ", 
value.toString());
             }
             else 
@@ -2038,6 +2043,7 @@ public class TagEncodingHelper implements NamingContainer
                 value = colValue;
             }
         }
+        
         // Checks whether it's another column    
         if (value instanceof Column)
         {   // Special case: Value is a column
diff --git 
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ValueTag.java 
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ValueTag.java
index d924388a..f5262fb5 100644
--- 
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ValueTag.java
+++ 
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ValueTag.java
@@ -101,12 +101,13 @@ public class ValueTag extends UIOutput // implements 
NamingContainer
         // Map<String, Object> map = getAttributes();
         String tagName = helper.getTagAttributeString("tag");
         String tooltip = 
helper.getValueTooltip(helper.getTagAttributeValue("title"));
-        String styleClass = 
helper.getTagAttributeString(InputControl.CSS_STYLE_CLASS);
-        // Check
+        String styleClass = 
helper.getTagAttributeStringEx(InputControl.CSS_STYLE_CLASS);
+
+        // Check whether tag is required
         if (StringUtils.isNotEmpty(tagName) || 
StringUtils.isNotEmpty(styleClass) || StringUtils.isNotEmpty(tooltip))
         {   // tagname
             if (StringUtils.isEmpty(tagName))
-                tagName="span";
+                tagName = InputControl.HTML_TAG_SPAN;
             // Detect type and additional style
             String addlStyle = null;
             // get style
diff --git 
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
 
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
index 9d2d6816..b8b7bcf5 100644
--- 
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
+++ 
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
@@ -2017,20 +2017,25 @@ public class TagEncodingHelper implements 
NamingContainer
         boolean useControlTagOverride = (isCssStyleClass && (this.component 
instanceof ControlTag) && isControlTagElementValid());
         Object value = getTagAttributeValue((useControlTagOverride ? 
"inputClass" : name));
 
-        // Special append with leading '+' (for StyleClass only)
-        boolean append = isCssStyleClass && (value instanceof String) && 
((String)value).length()>0 && ((String)value).charAt(0)=='+';
-        if (append)
-            value = ((String)value).substring(1); // remove leadng '+'
+        // Special "styleClass" append column attribute unless leading '-'
+        boolean append = false;
+        if (isCssStyleClass && (value instanceof String) && 
((String)value).length()>0)
+        {   // if value starts with '!' then do not append but replace
+            if (((String)value).charAt(0)=='!')
+                value = ((String)value).substring(1); // remove leadng '!'
+            else if (((String)value).equals("-"))
+                return null; // omit, if value is '-'
+            else
+                append = true; // append (default)
+        }
         
-        // Get column style
+        // Get column attribute
         if ((value==null || append) && hasColumn())
         {   // Check Column
             Object colValue = column.getAttribute(name);
             if (append) 
             {   // append styles
-                if (ObjectUtils.isEmpty(value))
-                    value = colValue;
-                else if (ObjectUtils.isNotEmpty(colValue))
+                if (ObjectUtils.isNotEmpty(colValue) && 
!colValue.equals(value))
                     value = StringUtils.concat(colValue.toString(), " ", 
value.toString());
             }
             else 
@@ -2038,6 +2043,7 @@ public class TagEncodingHelper implements NamingContainer
                 value = colValue;
             }
         }
+        
         // Checks whether it's another column    
         if (value instanceof Column)
         {   // Special case: Value is a column

Reply via email to