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 8458d03cb0 ISIS-3085: Wicket Viewer: for all temporal values, adds a
time-zone badge
8458d03cb0 is described below
commit 8458d03cb0df1158ee89a32fa65241780a8be8b0
Author: Andi Huber <[email protected]>
AuthorDate: Fri Jul 15 11:54:55 2022 +0200
ISIS-3085: Wicket Viewer: for all temporal values, adds a time-zone
badge
---
.../temporal/TemporalValueSemanticsProvider.java | 25 +++++++++++++++++++++-
.../scalars/datepicker/DateTimeConfig.java | 14 ++++++++++++
.../datepicker/TextFieldWithDateTimePicker.java | 15 +++++++------
3 files changed, 47 insertions(+), 7 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/temporal/TemporalValueSemanticsProvider.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/temporal/TemporalValueSemanticsProvider.java
index a1be6a5295..757f3259c3 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/temporal/TemporalValueSemanticsProvider.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/temporal/TemporalValueSemanticsProvider.java
@@ -20,12 +20,15 @@ package
org.apache.isis.core.metamodel.valuesemantics.temporal;
import java.time.Duration;
import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeFormatterBuilder;
import java.time.format.FormatStyle;
import java.time.temporal.ChronoUnit;
import java.time.temporal.Temporal;
import java.time.temporal.TemporalQuery;
+import java.util.Locale;
import java.util.Optional;
import java.util.function.BiFunction;
+import java.util.function.Function;
import java.util.function.UnaryOperator;
import javax.inject.Inject;
@@ -150,7 +153,27 @@ implements TemporalValueSemantics<T> {
public final String htmlPresentation(
final ValueSemanticsProvider.Context context,
final T value) {
- return renderHtml(value, getRenderingFormat(context)::format);
+ return renderHtml(value, withTimeZoneBadge(context,
getRenderingFormat(context)::format));
+ }
+
+ @Getter(lazy = true)
+ private final DateTimeFormatter isoTimeZoneFormat = new
DateTimeFormatterBuilder()
+ .appendOffsetId()
+ .toFormatter(Locale.US); // arbitrarily picking a locale, just in
case; (this is an ISO format)
+
+ /**
+ * Adds a html badge with time-zone information. If this is a local
temporal,
+ * instead adds the translatable literal 'local' as a html badge.
+ * @apiNote Ideally this logic would move to Wicket Viewer, as it depends
on presence of <i>Bootstrap</i>.
+ */
+ private Function<T, String> withTimeZoneBadge(
+ final ValueSemanticsProvider.Context context,
+ final Function<T, String> toString) {
+ return value->toString.apply(value)
+ + String.format(" <span class=\"badge
bg-secondary\">%s</span>",
+ this.getOffsetCharacteristic().isLocal()
+ ? translate("local")
+ : getIsoTimeZoneFormat().format(value));
}
// -- PARSER
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/DateTimeConfig.java
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/DateTimeConfig.java
index 2cf027dba9..a0ba6c9b0a 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/DateTimeConfig.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/DateTimeConfig.java
@@ -150,6 +150,11 @@ public class DateTimeConfig extends AbstractConfig {
*/
private static final IKey<Boolean> ClearButton = newKey("clearBtn", false);
+ /**
+ * Whether or not to show the close button.
+ */
+ private static final IKey<Boolean> CloseButton = newKey("closeBtn", false);
+
/**
* Whether or not to show week numbers to the left of week rows.
*/
@@ -370,6 +375,15 @@ public class DateTimeConfig extends AbstractConfig {
return this;
}
+ /**
+ * @param value Whether or not to display a 'clear' button, which allows
for clearing the input field.
+ * @return this instance for chaining
+ */
+ public DateTimeConfig closeButton(final boolean value) {
+ put(CloseButton, value);
+ return this;
+ }
+
/**
* @param value Whether or not to show week numbers to the left of week
rows.
* @return this instance for chaining
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/TextFieldWithDateTimePicker.java
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/TextFieldWithDateTimePicker.java
index 3eecf541ff..0d71aac43b 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/TextFieldWithDateTimePicker.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/TextFieldWithDateTimePicker.java
@@ -35,6 +35,7 @@ import org.apache.wicket.util.convert.IConverter;
import org.apache.isis.core.runtime.context.IsisAppCommonContext;
import
org.apache.isis.viewer.wicket.model.converter.ConverterBasedOnValueSemantics;
+import
org.apache.isis.viewer.wicket.ui.components.scalars.datepicker.DateTimeConfig.TodayButton;
import lombok.val;
@@ -51,6 +52,7 @@ import static de.agilecoders.wicket.jquery.JQuery.$;
*/
public class TextFieldWithDateTimePicker<T>
extends TextField<T>
+//extends AbstractDateTimePickerWithIcon<T>
implements IConverter<T> {
private static final long serialVersionUID = 1L;
@@ -98,20 +100,22 @@ implements IConverter<T> {
val config = new DateTimeConfig();
+ // FIXME[ISIS-3085] some of the config options were already broken in
TDv5, needs fixes for TDv6
+
// if this text field is for a LocalDate, then the pattern obtained
will just be a simple date format
// (with no hour/minute components).
final String dateTimePattern =
((ConverterBasedOnValueSemantics<T>)converter).getEditingPattern();
config.withFormat(_TimeFormatUtil.convertToMomentJsFormat(dateTimePattern));
-
config.calendarWeeks(true);
config.useCurrent(false);
-
- // seems not to do anything...
- //config.allowKeyboardNavigation(true);
-
config.minDate(commonContext.getConfiguration().getViewer().getWicket().getDatePicker().getMinDate());
config.maxDate(commonContext.getConfiguration().getViewer().getWicket().getDatePicker().getMaxDate());
config.readonly(!this.isEnabled());
+ config.highlightToday(true);
+ config.showTodayButton(TodayButton.TRUE);
+ config.clearButton(isInputNullable());
+ config.closeButton(true);
+ config.allowKeyboardNavigation(true);
this.config = config;
@@ -198,5 +202,4 @@ implements IConverter<T> {
return $(this).chain("datetimepicker", config).get();
}
-
}