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

Reply via email to