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 356e72ea92 CAUSEWAY-3797: allows sorting for primitives, strings and
enums
356e72ea92 is described below
commit 356e72ea928e5f17191d19f2e31252104cd613ed
Author: Andi Huber <[email protected]>
AuthorDate: Thu Jun 27 13:43:26 2024 +0200
CAUSEWAY-3797: allows sorting for primitives, strings and enums
- also has some CSS fixes for the column header
---
.../core/metamodel/spec/ObjectSpecification.java | 11 +++++---
.../CollectionContentsAsAjaxTablePanel.css | 29 +++++++++++-----------
.../CollectionContentsAsAjaxTablePanel.java | 2 +-
.../ui/components/table/head/HeadersToolbar.html | 2 +-
.../table/head/HeadersToolbarAbstract.java | 19 ++++++--------
5 files changed, 32 insertions(+), 31 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/ObjectSpecification.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/ObjectSpecification.java
index c86a8f95b6..b42e21785b 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/ObjectSpecification.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/ObjectSpecification.java
@@ -459,10 +459,15 @@ extends
}
/**
- * Whether {@link #getCorrespondingClass()} implements {@link Comparable}.
+ * Whether {@link #getCorrespondingClass()} implements {@link Comparable}
+ * or has ordering (primitives, strings and enums).
*/
- default boolean isComparable() {
- return Comparable.class.isAssignableFrom(getCorrespondingClass());
+ default boolean isComparableOrOrdered() {
+ var cls = getCorrespondingClass();
+ return Comparable.class.isAssignableFrom(cls)
+ || cls.isPrimitive()
+ || cls.equals(String.class)
+ || cls.isEnum();
}
/**
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css
index 5181dc487f..9be79e6ab0 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css
@@ -19,7 +19,7 @@
/* CSS for the Table Panel and all its child components, toolbars, search-bar
etc. */
- .table-header-sortIcon {
+ .collectionContentsAsAjaxTablePanel .table-header-sortIcon {
color: grey;
}
@@ -28,6 +28,18 @@
margin-right: 1rem;
}
+.collectionContentsAsAjaxTablePanel th.column-sortable .column-header-label {
+ color:var(--link-color);
+ opacity:0.75;
+ vertical-align: middle;
+}
+.collectionContentsAsAjaxTablePanel th.column-sortable a:hover
.column-header-label,
+.collectionContentsAsAjaxTablePanel th.column-nonsortable .column-header-label
{
+ color:var(--link-color-hover);
+ opacity:0.75;
+ vertical-align: middle;
+}
+
/* table search bar is present only optionally on tables, so if present,
it needs a bit of top spacing (but only in parented tables,
standalone tables don't have the 'padding-top: 0px' CSS hack) */
@@ -54,21 +66,10 @@
margin-top:10px;
}
-.collectionContentsAsAjaxTablePanel table.contents caption { text-align: left;
}
-/*
-.collectionContentsAsAjaxTablePanel table.contents tr {
-}
-*/
-
-.collectionContentsAsAjaxTablePanel table.contents tr th,
-.collectionContentsAsAjaxTablePanel table.contents tr th a span {
- text-align: left;
- font-weight: bold;
+.collectionContentsAsAjaxTablePanel table.contents caption {
+ text-align: left;
}
-.collectionContentsAsAjaxTablePanel table.contents tr th a {
- font-weight: normal;
-}
.collectionContentsAsAjaxTablePanel table.contents #message {
padding-left: 3px;
}
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
index c55bb2a34d..42be9061bf 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
@@ -204,7 +204,7 @@ implements CollectionCountProvider {
private SingularColumn createSingularColumn(final OneToOneAssociation
property) {
val collectionModel = getModel();
final String parentTypeName =
property.getDeclaringType().getLogicalTypeName();
- final Optional<String> sortability =
property.getElementType().isComparable()
+ final Optional<String> sortability =
property.getElementType().isComparableOrOrdered()
? Optional.of(property.getId())
: Optional.empty();
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/head/HeadersToolbar.html
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/head/HeadersToolbar.html
index c01ae0aa14..b393acee4e 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/head/HeadersToolbar.html
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/head/HeadersToolbar.html
@@ -20,7 +20,7 @@
<wicket:container wicket:id="headers">
<th wicket:id="header">
<div>
- <strong wicket:id="label">[header-label]</strong>
+ <strong wicket:id="label"
class="column-header-label">[header-label]</strong>
<span wicket:id="sortIcon"
class="table-header-sortIcon" style="margin-left: 0.2em"></span>
</div>
</th>
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/head/HeadersToolbarAbstract.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/head/HeadersToolbarAbstract.java
index 3a1cb26930..3a055901be 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/head/HeadersToolbarAbstract.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/table/head/HeadersToolbarAbstract.java
@@ -40,7 +40,6 @@ import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.RefreshingView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
-import org.apache.wicket.util.string.Strings;
import org.apache.causeway.commons.internal.base._Casts;
import org.apache.causeway.core.config.CausewayConfiguration;
@@ -70,10 +69,7 @@ abstract class HeadersToolbarAbstract<S> extends
AbstractToolbar {
*/
@Override
public void onComponentTag(final Component component, final
ComponentTag tag) {
- String className = getCssClass();
- if (!Strings.isEmpty(className)) {
- tag.append("class", className, " ");
- }
+ Wkt.cssAppend(tag, getCssClass());
}
}
@@ -118,17 +114,13 @@ abstract class HeadersToolbarAbstract<S> extends
AbstractToolbar {
header = newSortableHeader("header",
column.getSortProperty(), stateLocator);
if (column instanceof IStyledColumn) {
- CssAttributeBehavior cssAttributeBehavior = new
CssAttributeBehavior() {
+ header.add(new CssAttributeBehavior() {
private static final long serialVersionUID = 1L;
-
@Override
- protected String getCssClass()
- {
+ protected String getCssClass() {
return ((IStyledColumn<?,
S>)column).getCssClass();
}
- };
-
- header.add(cssAttributeBehavior);
+ });
}
} else {
header = new WebMarkupContainer("header");
@@ -143,6 +135,9 @@ abstract class HeadersToolbarAbstract<S> extends
AbstractToolbar {
if(column instanceof TitleColumn) {
Wkt.cssAppend(header, "title-column");
}
+ Wkt.cssAppend(header, column.isSortable()
+ ? "column-sortable"
+ : "column-nonsortable");
}
};
add(headers);