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();
}
}