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

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


The following commit(s) were added to refs/heads/master by this push:
     new 4dbb4adfb6 ISIS-3180: refactors programmatic badge rendering into 
common utility
4dbb4adfb6 is described below

commit 4dbb4adfb604b42674e0467539d54072024b526d
Author: Andi Huber <[email protected]>
AuthorDate: Sat Aug 27 11:38:07 2022 +0200

    ISIS-3180: refactors programmatic badge rendering into common utility
---
 .../commons/internal/html/_BootstrapBadge.java     | 80 ++++++++++++++++++++++
 .../valuesemantics/temporal/BadgeRenderer.java     | 16 ++---
 .../PlaceholderRenderServiceDefault.java           |  9 ++-
 3 files changed, 94 insertions(+), 11 deletions(-)

diff --git 
a/commons/src/main/java/org/apache/isis/commons/internal/html/_BootstrapBadge.java
 
b/commons/src/main/java/org/apache/isis/commons/internal/html/_BootstrapBadge.java
new file mode 100644
index 0000000000..58842db771
--- /dev/null
+++ 
b/commons/src/main/java/org/apache/isis/commons/internal/html/_BootstrapBadge.java
@@ -0,0 +1,80 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.commons.internal.html;
+
+import java.util.List;
+import java.util.stream.Stream;
+
+import org.apache.isis.commons.internal.base._NullSafe;
+import org.apache.isis.commons.internal.base._Strings;
+
+import lombok.Builder;
+import lombok.Singular;
+import lombok.val;
+/**
+ * <h1>- internal use only -</h1>
+ * <p>
+ * <b>WARNING</b>: Do <b>NOT</b> use any of the classes provided by this 
package! <br/>
+ * These may be changed or removed without notice!
+ * </p>
+ *
+ * @since 2.0
+ */
[email protected] @Builder
+public class _BootstrapBadge {
+
+    final String caption;
+    final String faIcon;
+    final String tooltip;
+
+    @Singular
+    final List<String> cssClasses;
+
+    public String toHtml() {
+
+        val sb = new StringBuilder();
+        sb
+        .append("<span ")
+        .append("class=\"")
+        .append(Stream.concat(Stream.of("badge", "bg-light"), 
_NullSafe.stream(cssClasses)))
+        .append("\"");
+
+        // optional tooltip
+        if(_Strings.isNotEmpty(getTooltip())) {
+            sb.append(" data-bs-container=\"body\" "
+                + "data-bs-toggle=\"tooltip\" "
+                + "title=\""+getTooltip()+"\"");
+        }
+
+        sb.append(">"); // end span open tag
+
+        // optional fa-icon
+        if(_Strings.isNotEmpty(getFaIcon())) {
+            sb
+            .append("<i class=\"")
+            .append(getFaIcon())
+            .append("\"></i>");
+        }
+
+        sb
+        .append(getCaption())
+        .append("</span>");
+        return sb.toString();
+    }
+}
\ No newline at end of file
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/temporal/BadgeRenderer.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/temporal/BadgeRenderer.java
index d3acb51b44..ac5d68bb8f 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/temporal/BadgeRenderer.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/temporal/BadgeRenderer.java
@@ -20,6 +20,8 @@ package 
org.apache.isis.core.metamodel.valuesemantics.temporal;
 
 import java.util.function.Supplier;
 
+import org.apache.isis.commons.internal.html._BootstrapBadge;
+
 /**
  * Provides html rendering for temporals with time-zone or time-offset 
information.
  *
@@ -42,14 +44,12 @@ public interface BadgeRenderer {
      * Depends on presence of <i>Bootstrap</i>.
      */
     public static BadgeRenderer bootstrapBadgeWithTooltip() {
-        return (text, faIconProvider, tooltipProvider)->String.format("<span "
-                + "class=\"badge bg-light\" "
-                + "data-bs-container=\"body\" "
-                + "data-bs-toggle=\"tooltip\" "
-                + "title=\"%s\">"
-                + "<i class=\"%s\"></i>"
-                + "%s"
-                + "</span>", tooltipProvider.get(), faIconProvider.get(), 
text);
+        return (text, faIconProvider, 
tooltipProvider)->_BootstrapBadge.builder()
+                .caption(text)
+                .faIcon(faIconProvider.get())
+                .tooltip(tooltipProvider.get())
+                .build()
+                .toHtml();
     }
 
 }
diff --git 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/placeholder/PlaceholderRenderServiceDefault.java
 
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/placeholder/PlaceholderRenderServiceDefault.java
index 18aaa23b03..0420bfcc43 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/placeholder/PlaceholderRenderServiceDefault.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/placeholder/PlaceholderRenderServiceDefault.java
@@ -29,6 +29,7 @@ import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.services.i18n.TranslationContext;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.applib.services.placeholder.PlaceholderRenderService;
+import org.apache.isis.commons.internal.html._BootstrapBadge;
 import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
 
 import lombok.NonNull;
@@ -58,9 +59,11 @@ implements PlaceholderRenderService {
 
     @Override
     public String asHtml(@NonNull final PlaceholderLiteral placeholderLiteral) 
{
-        return String.format("<span class=\"%s\">%s</span>",
-                "badge bg-light placeholder-literal-" + 
placeholderLiteral.getLiteral(),
-                asText(placeholderLiteral));
+        return _BootstrapBadge.builder()
+                .caption(asText(placeholderLiteral))
+                .cssClass("placeholder-literal-" + 
placeholderLiteral.getLiteral())
+                .build()
+                .toHtml();
     }
 
 }

Reply via email to