You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2023/11/20 14:35:47 UTC
(causeway) branch master updated: CAUSEWAY-3646: style fixes
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/causeway.git
The following commit(s) were added to refs/heads/master by this push:
new f3067235ff CAUSEWAY-3646: style fixes
f3067235ff is described below
commit f3067235ff888b8f95719d2bfcd2015d2df79837
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Nov 20 15:35:42 2023 +0100
CAUSEWAY-3646: style fixes
---
.../causeway/applib/fa/FontAwesomeLayers.java | 77 +++++++++++++++-------
.../members/iconfa/FaStaticFacetAbstract.java | 2 +-
.../iconfa/FontAwesomeLayersFacetMethodTest.java | 2 +-
.../bootstrap/css/bootstrap-overrides-all-v2.css | 5 +-
4 files changed, 58 insertions(+), 28 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/fa/FontAwesomeLayers.java b/api/applib/src/main/java/org/apache/causeway/applib/fa/FontAwesomeLayers.java
index aebf24339a..3c97b26c6b 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/fa/FontAwesomeLayers.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/fa/FontAwesomeLayers.java
@@ -30,9 +30,13 @@ import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.base._NullSafe;
import org.apache.causeway.commons.internal.base._Strings;
+import lombok.NonNull;
import lombok.experimental.Accessors;
/**
+ * <h1>EXPERIMENTAL FEATURE WARNING</h1>
+ * This class is still subject to changes without warning or notice!
+ * <p>
* Model for a single or multiple (layered) <i>Font Awesome</i> icon(s).
*
* @since 2.0 {@index}
@@ -53,23 +57,34 @@ public class FontAwesomeLayers implements Serializable {
return singleIcon("fa-blank");
}
+ public static FontAwesomeLayers fallback() {
+ return singleIcon("fa-cube");
+ }
+
public static FontAwesomeLayers singleIcon(final String faClasses) {
- return new FontAwesomeLayers(null, null, List.of(new IconEntry(normalizeFaClasses(faClasses), null)), null);
+ return new FontAwesomeLayers(null, null, List.of(new IconEntry(normalizeCssClasses(faClasses, "fa"), null)), null);
}
- public static FontAwesomeLayers iconStack(final IconEntry baseEntry, final IconEntry overlayEntry) {
- return new FontAwesomeLayers(null, null, List.of(baseEntry, overlayEntry), null);
+ public static FontAwesomeLayers iconStack(
+ final @Nullable String containerCssClasses,
+ final @Nullable String containerCssStyle,
+ final @NonNull IconEntry baseEntry,
+ final @NonNull IconEntry overlayEntry) {
+ return new FontAwesomeLayers(
+ normalizeCssClasses(containerCssClasses, "fa-stack"),
+ containerCssStyle,
+ List.of(baseEntry, overlayEntry), null);
}
// -- UTILITIES
- public static String normalizeFaClasses(final String faClasses) {
- var elements = _Strings.splitThenStream(faClasses, " ")
- .map(String::trim)
- .filter(_Strings::isNotEmpty)
- .sorted((a, b)->a.compareTo(b))
- .collect(Collectors.toCollection(TreeSet::new));
- elements.add("fa"); // mandatory
+ public static String normalizeCssClasses(final String cssClasses, final String... mandatory) {
+ var elements = _Strings.splitThenStream(cssClasses, " ")
+ .map(String::trim)
+ .filter(_Strings::isNotEmpty)
+ .collect(Collectors.toCollection(TreeSet::new));
+ _NullSafe.stream(mandatory)
+ .forEach(elements::add);
return elements.stream().collect(Collectors.joining(" "));
}
@@ -79,6 +94,18 @@ public class FontAwesomeLayers implements Serializable {
public static class IconEntry {
@Nullable String cssClasses;
@Nullable String cssStyle;
+ public String toHtml() {
+ return faIconHtml(cssClasses, cssStyle);
+ }
+ // -- HELPER
+ private static String faIconHtml(final @Nullable String faClasses) {
+ if(_Strings.isEmpty(faClasses)) return "";
+ return String.format("<i class=\"%s\"></i>", faClasses);
+ }
+ private static String faIconHtml(final @Nullable String faClasses, final @Nullable String faStyle) {
+ if(_Strings.isEmpty(faStyle)) return faIconHtml(faClasses);
+ return String.format("<i class=\"%s\" style=\"%s\"></i>", faClasses, faStyle);
+ }
}
@lombok.Value @Accessors(fluent=true) // record candidate
@@ -103,22 +130,15 @@ public class FontAwesomeLayers implements Serializable {
var iconEntries = Can.ofCollection(iconEntries());
if(iconEntries.isEmpty()) {
// fallback to cube icon
- return "<span>"
- + faIcon("fa-cube")
- + "</span>";
+ return fallback().toHtml();
}
if(iconEntries.isCardinalityOne()) {
// use simple rendering (not a stack nor layered)
- return "<span>"
- + faIcon(iconEntries.getFirstElseFail().cssClasses())
- + "</span>";
+ return faSpanHtml(iconEntries.getFirstElseFail().toHtml(), null, null);
}
var sb = new StringBuilder();
- iconEntries.forEach(iconEntry->sb.append(faIcon(iconEntry.cssClasses())));
- //TODO[CAUSEWAY-3646] remove hardcoded tweaks
- return "<span class=\"fa-stack\" style=\"width: 1.2rem;\">"
- + sb.toString()
- + "</span>";
+ iconEntries.forEach(iconEntry->sb.append(iconEntry.toHtml()));
+ return faSpanHtml(sb.toString(), containerCssClasses, containerCssStyle);
}
// -- UTILITY
@@ -132,8 +152,17 @@ public class FontAwesomeLayers implements Serializable {
// -- HELPER
- private String faIcon(final String faClasses) {
- return String.format("<i class=\"%s\"></i>", faClasses);
+ private static String faSpanHtml(
+ final @Nullable String innerHtml,
+ final @Nullable String cssClasses,
+ final @Nullable String cssStyle) {
+ if(_Strings.isEmpty(innerHtml)) return "";
+ var attrClass = _Strings.nonEmpty(cssClasses)
+ .map(s->String.format(" class=\"%s\"", s))
+ .orElse("");
+ var attrStyle = _Strings.nonEmpty(cssStyle)
+ .map(s->String.format(" style=\"%s\"", s))
+ .orElse("");
+ return String.format("<span%s%s>%s</span>", attrClass, attrStyle, innerHtml);
}
-
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/iconfa/FaStaticFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/iconfa/FaStaticFacetAbstract.java
index d06db05f3d..4d42e4b943 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/iconfa/FaStaticFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/iconfa/FaStaticFacetAbstract.java
@@ -85,7 +85,7 @@ implements FaStaticFacet {
@Override
public final FontAwesomeLayers getLayers() {
- return FontAwesomeLayers.singleIcon(asSpaceSeparatedWithAdditional(FIXED_WIDTH));
+ return FontAwesomeLayers.singleIcon(asSpaceSeparatedWithAdditional("fa-lg"));
}
@Override
diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/iconfa/FontAwesomeLayersFacetMethodTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/iconfa/FontAwesomeLayersFacetMethodTest.java
index 6f5fa7a50e..7552b1d025 100644
--- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/iconfa/FontAwesomeLayersFacetMethodTest.java
+++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/iconfa/FontAwesomeLayersFacetMethodTest.java
@@ -78,7 +78,7 @@ extends FacetFactoryTestAbstract {
var actual = imperativeCssClassFacet.getFaLayersProvider(domainObject).getLayers();
assertEquals(FONTAWESOME_LAYERS_SAMPLE, actual);
assertEquals(
- FontAwesomeLayers.normalizeFaClasses("fa-solid fa-bookmark"),
+ FontAwesomeLayers.normalizeCssClasses("fa-solid fa-bookmark", "fa"),
actual.iconEntries().get(0).cssClasses());
});
}
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 1e9e8b1b59..5115e9df19 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
@@ -573,8 +573,9 @@ span.containedButtonPanel {
}
/* fa icon size for page titles */
-.entityHeaderPanel .fa {
- font-size: 1.5em;
+.entityHeaderPanel .entityIconAndTitlePanel .fa,
+.entityHeaderPanel .entityIconAndTitlePanel .fa-stack {
+ font-size: calc(1.275rem + .3vw);
}
/** top alignment for additional buttons on scalar value inputs */