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 07:16:58 UTC
(causeway) branch 3646-fa.layers updated: CAUSEWAY-3646: model the fa position into FontAwesomeLayers
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch 3646-fa.layers
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/3646-fa.layers by this push:
new 6d79eb15e9 CAUSEWAY-3646: model the fa position into FontAwesomeLayers
6d79eb15e9 is described below
commit 6d79eb15e9001459530580a72510546712590da9
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Nov 20 08:16:54 2023 +0100
CAUSEWAY-3646: model the fa position into FontAwesomeLayers
---
.../apache/causeway/applib/fa/FontAwesomeLayers.java | 7 +++++++
.../facets/members/cssclassfa/CssClassFaFactory.java | 5 -----
.../members/cssclassfa/CssClassFaStaticFacet.java | 6 ++++++
.../CssClassFaFacetOnMemberFromConfiguredRegex.java | 20 +++-----------------
.../FontAwesomeLayersFacetViaIconFaLayersMethod.java | 2 +-
.../commons/model/decorators/IconDecorator.java | 19 +++----------------
.../ui/components/actionmenu/CssClassFaBehavior.java | 9 ++++-----
7 files changed, 24 insertions(+), 44 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 8c3361df77..c0ca7a7b82 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
@@ -23,6 +23,7 @@ import java.util.List;
import org.springframework.lang.Nullable;
+import org.apache.causeway.applib.layout.component.CssClassFaPosition;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.base._NullSafe;
import org.apache.causeway.commons.io.JsonUtils;
@@ -79,6 +80,11 @@ public class FontAwesomeLayers implements Serializable {
@Nullable List<IconEntry> iconEntries;
@Nullable List<SpanEntry> spanEntries;
+ /**
+ * Position of <i>Font Awesome</i> icon, relative to its accompanied title.
+ */
+ @Nullable CssClassFaPosition postition = CssClassFaPosition.LEFT;
+
//TODO[CAUSEWAY-3646] toJson will not work with records?
public String toJson() {
return JsonUtils.toStringUtf8(this);
@@ -103,6 +109,7 @@ public class FontAwesomeLayers implements Serializable {
// -- UTILITY
+ //TODO[CAUSEWAY-3646] how to determine position when empty
public FontAwesomeLayers emptyToBlank() {
return _NullSafe.size(this.iconEntries())>0
? this
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/CssClassFaFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/CssClassFaFactory.java
index d859a8dfeb..cc649c0789 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/CssClassFaFactory.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/CssClassFaFactory.java
@@ -26,11 +26,6 @@ import org.apache.causeway.applib.layout.component.CssClassFaPosition;
*/
public interface CssClassFaFactory {
- /**
- * Position of <i>Font Awesome</i> icon.
- */
- CssClassFaPosition getPosition();
-
/**
* Creates the model object that is used for FA icon rendering.
*/
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/CssClassFaStaticFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/CssClassFaStaticFacet.java
index 4ee4645b9d..f8e03a4966 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/CssClassFaStaticFacet.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/CssClassFaStaticFacet.java
@@ -21,12 +21,18 @@ package org.apache.causeway.core.metamodel.facets.members.cssclassfa;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import org.apache.causeway.applib.layout.component.CssClassFaPosition;
import org.apache.causeway.commons.internal.base._NullSafe;
import org.apache.causeway.commons.internal.base._Strings;
public interface CssClassFaStaticFacet
extends CssClassFaFacet, CssClassFaFactory {
+ /**
+ * Position of <i>Font Awesome</i> icon, relative to its accompanied title.
+ */
+ CssClassFaPosition getPosition();
+
Stream<String> streamCssClasses();
/**
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFromConfiguredRegex.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFromConfiguredRegex.java
index ceb688cb53..16a3e2c091 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFromConfiguredRegex.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFromConfiguredRegex.java
@@ -92,23 +92,9 @@ extends CssClassFaImperativeFacetAbstract {
public CssClassFaFactory getCssClassFaFactory(final Supplier<ManagedObject> domainObjectProvider) {
return staticCssClassFaFactory
- .orElseGet(()->new CssClassFaFactory() {
-
- @Override
- public CssClassFaPosition getPosition() {
- return cssClassFaFactoryForConfiguredRegexIfPossible(domainObjectProvider)
- .map(CssClassFaFactory::getPosition)
- .orElse(CssClassFaPosition.LEFT);
- }
-
- @Override
- public FontAwesomeLayers getLayers() {
- return cssClassFaFactoryForConfiguredRegexIfPossible(domainObjectProvider)
- .map(CssClassFaFactory::getLayers)
- .orElseGet(FontAwesomeLayers::empty);
- }
-
- });
+ .orElseGet(()->() -> cssClassFaFactoryForConfiguredRegexIfPossible(domainObjectProvider)
+ .map(CssClassFaFactory::getLayers)
+ .orElseGet(FontAwesomeLayers::empty));
}
// -- HELPER
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/iconfa/method/FontAwesomeLayersFacetViaIconFaLayersMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/iconfa/method/FontAwesomeLayersFacetViaIconFaLayersMethod.java
index 9fdd899349..dcfc3ae353 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/iconfa/method/FontAwesomeLayersFacetViaIconFaLayersMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/iconfa/method/FontAwesomeLayersFacetViaIconFaLayersMethod.java
@@ -69,7 +69,7 @@ implements HasImperativeAspect {
@Override
public CssClassFaFactory getCssClassFaFactory(final Supplier<ManagedObject> domainObjectProvider) {
//TODO[CAUSEWAY-3646] implement
- return null;
+ return () -> layers(domainObjectProvider.get());
}
@Override
diff --git a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/decorators/IconDecorator.java b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/decorators/IconDecorator.java
index b60d8650c7..19b787f016 100644
--- a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/decorators/IconDecorator.java
+++ b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/decorators/IconDecorator.java
@@ -24,8 +24,6 @@ import java.util.Optional;
import org.springframework.lang.Nullable;
import org.apache.causeway.applib.fa.FontAwesomeLayers;
-import org.apache.causeway.applib.layout.component.CssClassFaPosition;
-import org.apache.causeway.commons.internal.base._NullSafe;
import org.apache.causeway.core.metamodel.facets.members.cssclassfa.CssClassFaFactory;
import lombok.AccessLevel;
@@ -58,9 +56,6 @@ public interface IconDecorator<T, R> {
@Getter
private final @NonNull FontAwesomeLayers fontAwesomeLayers;
- @Getter
- private final @NonNull CssClassFaPosition position;
-
/**
* @param forceAlignmentOnIconAbsence enforced in drop-dows,
* but not in horizontal action panels,
@@ -73,17 +68,9 @@ public interface IconDecorator<T, R> {
return Optional.ofNullable(cssClassFaFactoryIfAny)
.map(cssClassFaFactory->new FontAwesomeDecorationModel(
forceAlignmentOnIconAbsence
- ? emptyToBlank(cssClassFaFactory.getLayers())
- : cssClassFaFactory.getLayers(),
- Optional.ofNullable(cssClassFaFactory.getPosition())
- .orElse(CssClassFaPosition.LEFT)));
-
- }
-
- private static FontAwesomeLayers emptyToBlank(final FontAwesomeLayers faLayers) {
- return _NullSafe.size(faLayers.iconEntries())>0
- ? faLayers
- : FontAwesomeLayers.blank();
+ ? cssClassFaFactory.getLayers().emptyToBlank()
+ : cssClassFaFactory.getLayers()
+ ));
}
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actionmenu/CssClassFaBehavior.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actionmenu/CssClassFaBehavior.java
index cc8e15c17c..43973096a1 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actionmenu/CssClassFaBehavior.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actionmenu/CssClassFaBehavior.java
@@ -26,7 +26,6 @@ import org.apache.causeway.viewer.commons.model.decorators.IconDecorator.FontAwe
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
-import lombok.val;
/**
* A behavior that prepends or appends the markup needed to show a Font Awesome icon
@@ -42,16 +41,16 @@ public class CssClassFaBehavior extends Behavior {
@Override
public void beforeRender(final Component component) {
super.beforeRender(component);
- val position = fontAwesomeDecorationModel.getPosition();
- if (position == null || CssClassFaPosition.LEFT == position) {
+ var faLayers = fontAwesomeDecorationModel.getFontAwesomeLayers();
+ if(CssClassFaPosition.isLeftOrUnspecified(faLayers.postition())) {
component.getResponse().write(fontAwesomeDecorationModel.getFontAwesomeLayers().toHtml());
}
}
@Override
public void afterRender(final Component component) {
- val position = fontAwesomeDecorationModel.getPosition();
- if (CssClassFaPosition.RIGHT == position) {
+ var faLayers = fontAwesomeDecorationModel.getFontAwesomeLayers();
+ if(!CssClassFaPosition.isLeftOrUnspecified(faLayers.postition())) {
component.getResponse().write(fontAwesomeDecorationModel.getFontAwesomeLayers().toHtml());
}
super.afterRender(component);