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 5670b6bae5 ISIS-3085: adds Date/Time Picker Locale (language) support
5670b6bae5 is described below
commit 5670b6bae5dfa348917bdd48e1a4c234fdd0fe7a
Author: andi-huber <[email protected]>
AuthorDate: Fri Jul 22 08:03:41 2022 +0200
ISIS-3085: adds Date/Time Picker Locale (language) support
---
.../metamodel/context/HasMetaModelContext.java | 7 +++
.../ScalarPanelTextFieldWithTemporalPicker.java | 4 +-
.../scalars/datepicker/DateTimeConfig.java | 68 +++++++---------------
.../datepicker/TextFieldWithDateTimePicker.java | 19 +++---
4 files changed, 41 insertions(+), 57 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/HasMetaModelContext.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/HasMetaModelContext.java
index 6917a53c08..0ddc758d1b 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/HasMetaModelContext.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/HasMetaModelContext.java
@@ -21,9 +21,11 @@ package org.apache.isis.core.metamodel.context;
import java.util.Optional;
import java.util.stream.Stream;
+import org.apache.isis.applib.locale.UserLocale;
import org.apache.isis.applib.services.factory.FactoryService;
import org.apache.isis.applib.services.i18n.TranslationService;
import org.apache.isis.applib.services.iactn.InteractionProvider;
+import org.apache.isis.applib.services.iactnlayer.InteractionContext;
import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.applib.services.repository.RepositoryService;
@@ -130,6 +132,11 @@ public interface HasMetaModelContext {
return getMetaModelContext().getWrapperFactory();
}
+ default Optional<UserLocale> currentUserLocale() {
+ return getInteractionProvider().currentInteractionContext()
+ .map(InteractionContext::getLocale);
+ }
+
// -- ADVANCED SHORTCUTS
default ManagedObject lookupServiceAdapterById(final String serviceId) {
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithTemporalPicker.java
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithTemporalPicker.java
index b908d4a730..030eb2a22e 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithTemporalPicker.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithTemporalPicker.java
@@ -48,11 +48,9 @@ extends ScalarPanelTextFieldWithValueSemantics<T> {
@Override
protected final TextField<T> createTextField(final String id) {
-
val scalarModel = scalarModel();
-
return new TextFieldWithDateTimePicker<T>(
- getCommonContext(), id, scalarModel, type,
getConverter(scalarModel));
+ id, scalarModel, type, getConverter(scalarModel));
}
@Override
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 aac929a7ed..d0e344fd70 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
@@ -19,6 +19,7 @@
package org.apache.isis.viewer.wicket.ui.components.scalars.datepicker;
import java.io.IOException;
+import java.util.Locale;
import java.util.Map;
import com.fasterxml.jackson.core.JsonGenerator;
@@ -41,6 +42,7 @@ import de.agilecoders.wicket.jquery.IKey;
* Configuration holder for all {@link TextFieldWithDateTimePicker}
configurations.
* Provides settings for <a
href="https://github.com/tempusdominus/bootstrap-4">Tempus Dominus Bootstrap 4
Datetime Picker</a>
* JavaScript widget
+ * @see DatetimePickerConfig
*/
public class DateTimeConfig extends AbstractConfig {
private static final long serialVersionUID = 1L;
@@ -110,15 +112,27 @@ public class DateTimeConfig extends AbstractConfig {
private static final IKey<String> MaxDate = newKey("maxDate", null);
+// /**
+// * The two-letter code of the language to use for month and day names.
+// * These will also be used as the input's value (and subsequently sent
to the
+// * server in the case of form submissions). Currently ships with English
('en');
+// * German ('de'), Brazilian ('br'), and Spanish ('es') translations, but
others
+// * can be added (see I18N below). If an unknown language code is given,
English
+// * will be used.
+// */
+// private static final IKey<String> Language = newKey("language", "en");
+
+ private static final IKey<String> Locale = newKey("locale", null);
+
/**
- * The two-letter code of the language to use for month and day names.
- * These will also be used as the input's value (and subsequently sent to
the
- * server in the case of form submissions). Currently ships with English
('en');
- * German ('de'), Brazilian ('br'), and Spanish ('es') translations, but
others
- * can be added (see I18N below). If an unknown language code is given,
English
- * will be used.
+ * @param locale The moment.js locale
+ * @return current instance
*/
- private static final IKey<String> Language = newKey("language", "en");
+ public DateTimeConfig useLocale(final Locale locale) {
+ put(Locale, locale.getLanguage());
+ return this;
+ }
+
/**
* The date format, combination of d, dd, m, mm, M, MM, yy, yyyy.
@@ -148,16 +162,6 @@ public class DateTimeConfig extends AbstractConfig {
*/
private static final IKey<Boolean> ForceParse = newKey("forceParse", true);
- /**
- * Whether or not to show the clear button.
- */
- 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.
*/
@@ -193,20 +197,6 @@ public class DateTimeConfig extends AbstractConfig {
return getString(Format);
}
- /**
- * @return the language to use
- */
- public String getLanguage() {
- return getString(Language);
- }
-
- /**
- * @return true if default language should be used.
- */
- public boolean isDefaultLanguageSet() {
- return Language.isDefaultValue(getLanguage());
- }
-
/**
* Will cause the date picker to stay open after selecting a date.
*
@@ -267,22 +257,6 @@ public class DateTimeConfig extends AbstractConfig {
return this;
}
- /**
- * The two-letter code of the language to use for month and day names.
- * These will also be used as the input's value (and subsequently sent to
the
- * server in the case of form submissions). Currently ships with English
('en'),
- * German ('de'), Brazilian ('br'), and Spanish ('es') translations, but
others
- * can be added (see I18N below). If an unknown language code is given,
English
- * will be used.
- *
- * @param value two letter language code (optional 5 letter code like
de_DE)
- * @return this instance for chaining
- */
- public DateTimeConfig withLanguage(final String value) {
- put(Language, value);
- return this;
- }
-
/**
* The default view to display when the picker is shown.
* Useful for date-of-birth datepicker.
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 9e081b6f9b..9c3ec070d1 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
@@ -29,7 +29,7 @@ import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.util.convert.IConverter;
-import org.apache.isis.core.config.IsisConfiguration;
+import org.apache.isis.applib.locale.UserLocale;
import org.apache.isis.core.runtime.context.IsisAppCommonContext;
import
org.apache.isis.viewer.wicket.model.converter.ConverterBasedOnValueSemantics;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -64,7 +64,6 @@ implements IConverter<T> {
private final DateTimeConfig config;
public TextFieldWithDateTimePicker(
- final IsisAppCommonContext commonContext,
final String id,
final ScalarModel scalarModel,
final Class<T> type,
@@ -74,10 +73,9 @@ implements IConverter<T> {
this.converter = converter;
this.config = createDatePickerConfig(
- commonContext.getConfiguration(),
+ scalarModel.getCommonContext(),
!scalarModel.isRequired());
-
/* debug
new IConverter<T>() {
@@ -171,13 +169,20 @@ implements IConverter<T> {
// -- HELPER
- private DateTimeConfig createDatePickerConfig(final IsisConfiguration
isisConfiguration, final boolean isInputNullable) {
+ private DateTimeConfig createDatePickerConfig(
+ final IsisAppCommonContext commonContext,
+ final boolean isInputNullable) {
val config = new DateTimeConfig();
+ config.useLocale(commonContext.currentUserLocale()
+ .map(UserLocale::getLanguageLocale)
+ .orElse(Locale.US));
+
// 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.useCalendarWeeks(true);
config.useCurrent(false);
@@ -215,8 +220,8 @@ implements IConverter<T> {
//XXX future extensions might allow to set bounds on a per member
basis (via ValueSemantics annotation)
//config.withMinDate(commonContext.getConfiguration().getViewer().getWicket().getDatePicker().minDateAsJavaUtilDate());
//config.withMaxDate(commonContext.getConfiguration().getViewer().getWicket().getDatePicker().maxDateAsJavaUtilDate());
-
config.minDate(isisConfiguration.getViewer().getWicket().getDatePicker().getMinDate());
-
config.maxDate(isisConfiguration.getViewer().getWicket().getDatePicker().getMaxDate());
+
config.minDate(commonContext.getConfiguration().getViewer().getWicket().getDatePicker().getMinDate());
+
config.maxDate(commonContext.getConfiguration().getViewer().getWicket().getDatePicker().getMaxDate());
return config;
}