This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch tempus-calendar-6
in repository https://gitbox.apache.org/repos/asf/openmeetings.git

commit 4cec26e0e9f523fa091723b50e10b2b7695e1c92
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Fri Sep 1 14:32:21 2023 +0700

    [OPENMEETINGS-2770] tempus-dominus-6
---
 .../common/datetime/AbstractOmDateTimePicker.html  |  27 ----
 .../common/datetime/AbstractOmDateTimePicker.java  | 153 ---------------------
 .../web/common/datetime/AjaxOmDatePicker.java      |  45 +++---
 .../web/common/datetime/OmDateTimePicker.java      |  52 +++----
 .../web/common/datetime/datepicker-functions.js    |  16 ---
 5 files changed, 41 insertions(+), 252 deletions(-)

diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/AbstractOmDateTimePicker.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/AbstractOmDateTimePicker.html
deleted file mode 100644
index 748e1ada2..000000000
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/AbstractOmDateTimePicker.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-
--->
-<!DOCTYPE html>
-<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-9.xsd";>
-<wicket:panel>
-       <span wicket:id="picker"></span>
-       <input type="hidden" wicket:id="date" />
-</wicket:panel>
-</html>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/AbstractOmDateTimePicker.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/AbstractOmDateTimePicker.java
deleted file mode 100644
index 431851fbc..000000000
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/AbstractOmDateTimePicker.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.common.datetime;
-
-import java.io.Serializable;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Locale;
-
-import org.apache.openmeetings.web.app.WebSession;
-import org.apache.wicket.Session;
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.JavaScriptHeaderItem;
-import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
-import org.apache.wicket.markup.html.form.FormComponent;
-import org.apache.wicket.markup.html.form.FormComponentPanel;
-import org.apache.wicket.markup.html.form.HiddenField;
-import org.apache.wicket.model.ChainingModel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.request.resource.JavaScriptResourceReference;
-import org.apache.wicket.request.resource.ResourceReference;
-
-import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.form.datetime.AbstractDateTimePickerWithIcon;
-import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.form.datetime.DatetimePickerConfig;
-import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.form.datetime.DatetimePickerIconConfig;
-import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesome6IconType;
-
-public abstract class AbstractOmDateTimePicker<T extends Serializable> extends 
FormComponentPanel<T> {
-       private static final long serialVersionUID = 1L;
-       private static final String DEFAULT_DATE_FORMAT = "yyyy/MM/dd";
-       private static final String DEFAULT_DATE_TIME_FORMAT = 
DEFAULT_DATE_FORMAT + " HH:mm:ss";
-       private static final ResourceReference FUNCJS = new 
JavaScriptResourceReference(AbstractOmDateTimePicker.class, 
"datepicker-functions.js");
-       private final boolean dateOnly;
-       private final HiddenField<T> date;
-       private AbstractDateTimePickerWithIcon<T> picker;
-       private String markupId;
-
-       AbstractOmDateTimePicker(String id, IModel<T> model, boolean dateOnly) {
-               super(id, model);
-               this.dateOnly = dateOnly;
-               date = newHidden("date", new ChainingModel<>(model));
-       }
-
-       @Override
-       protected void onInitialize() {
-               super.onInitialize();
-               final String format = dateOnly ? getDateFormat() : 
getDateTimeFormat();
-               DatetimePickerConfig config = new DatetimePickerConfig()
-                               
.useLocale(WebSession.get().getLocale().toLanguageTag())
-                               .withFormat(patch(format))
-                               .withKeepInvalid(true)
-                               .with(new 
DatetimePickerIconConfig().useDateIcon(FontAwesome6IconType.calendar_s)
-                                               
.useTimeIcon(FontAwesome6IconType.clock_s).useUpIcon(FontAwesome6IconType.arrow_up_s)
-                                               
.useDownIcon(FontAwesome6IconType.arrow_down_s)
-                                               
.usePreviousIcon(FontAwesome6IconType.arrow_left_s)
-                                               
.useNextIcon(FontAwesome6IconType.arrow_right_s)
-                                               
.useTodayIcon(FontAwesome6IconType.calendar_check_s).useClearIcon(FontAwesome6IconType.eraser_s)
-                                               
.useCloseIcon(FontAwesome6IconType.xmark_s));
-               picker = new AbstractDateTimePickerWithIcon<>("picker", new 
Model<>(getModelObject()), config) {
-                       private static final long serialVersionUID = 1L;
-
-                       @Override
-                       protected FormComponent<T> newInput(String wicketId, 
String dateFormat) {
-                               FormComponent<T> input = 
AbstractOmDateTimePicker.this.newInput(wicketId, dateFormat);
-                               markupId = input.getMarkupId();
-                               return input;
-                       }
-               };
-               date.setOutputMarkupId(true);
-               add(date, picker.setRenderBodyOnly(false));
-       }
-
-       @Override
-       public void convertInput() {
-               date.convertInput();
-               if (date.isValid()) {
-                       setConvertedInput(date.getConvertedInput());
-               } else {
-                       date.getFeedbackMessages().forEach(msg -> 
getFeedbackMessages().add(msg));
-                       date.getFeedbackMessages().clear();
-               }
-       }
-
-       protected abstract FormComponent<T> newInput(String wicketId, String 
dateFormat);
-
-       protected abstract HiddenField<T> newHidden(String wicketId, IModel<T> 
model);
-
-       @Override
-       public void renderHead(IHeaderResponse response) {
-               super.renderHead(response);
-               response.render(JavaScriptHeaderItem.forReference(FUNCJS));
-               response.render(new OnDomReadyHeaderItem("$('#" + markupId + 
"').on('change.datetimepicker', function (e) {omDateTimeInputHasChanged(e, '" + 
date.getMarkupId() + "', " + dateOnly + ");});"));
-       }
-
-       @Override
-       public boolean processChildren() {
-               return false;
-       }
-
-       public static String patch(String format) {
-               // in Java free text is escaped with single-quotes
-               // moment.js uses []
-               return format.replaceAll("'([^']*)'", "\\[$1\\]");
-       }
-
-       public static String getDateTimeFormat() {
-               return getDateTimeFormat(WebSession.get().getLocale());
-       }
-
-       @Override
-       public FormComponent<T> setLabel(IModel<String> labelModel) {
-               date.setLabel(labelModel);
-               return this;
-       }
-
-       @Override
-       protected void onModelChanged() {
-               picker.setModelObject(getModelObject());
-       }
-
-       public static String getDateTimeFormat(Locale loc) {
-               DateFormat fmt = 
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, loc);
-               if (fmt instanceof SimpleDateFormat sfmt) {
-                       return sfmt.toPattern();
-               }
-               return DEFAULT_DATE_TIME_FORMAT;
-       }
-
-       public static String getDateFormat() {
-               DateFormat fmt = DateFormat.getDateInstance(DateFormat.SHORT, 
Session.get().getLocale());
-               if (fmt instanceof SimpleDateFormat sfmt) {
-                       return sfmt.toPattern();
-               }
-               return DEFAULT_DATE_FORMAT;
-       }
-}
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/AjaxOmDatePicker.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/AjaxOmDatePicker.java
index 893723ce2..32ed225fd 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/AjaxOmDatePicker.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/AjaxOmDatePicker.java
@@ -19,53 +19,46 @@
 package org.apache.openmeetings.web.common.datetime;
 
 import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.util.Locale;
 
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import 
org.apache.wicket.extensions.markup.html.form.datetime.LocalDateTextField;
 import org.apache.wicket.markup.html.form.FormComponent;
-import org.apache.wicket.markup.html.form.HiddenField;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.util.convert.IConverter;
-import org.apache.wicket.util.convert.converter.LocalDateConverter;
 
-public class AjaxOmDatePicker extends AbstractOmDateTimePicker<LocalDate> {
+import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.form.tempusdominus.AbstractTempusDominusWithIcon;
+import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.form.tempusdominus.TempusDominusDisplayConfig.ViewModeType;
+
+public class AjaxOmDatePicker extends AbstractTempusDominusWithIcon<LocalDate> 
{
        private static final long serialVersionUID = 1L;
 
        public AjaxOmDatePicker(String id) {
-               super(id, null, true);
+               super(id, null, OmDateTimePicker.newConfig()
+                               .withClass(LocalDate.class)
+                               .withDisplay(cfg -> 
cfg.withViewMode(ViewModeType.YEARS)));
        }
 
        @Override
-       protected HiddenField<LocalDate> newHidden(String wicketId, 
IModel<LocalDate> model) {
-               final IConverter<?> converter = new LocalDateConverter() {
-                       private static final long serialVersionUID = 1L;
-
+       protected void onInitialize() {
+               super.onInitialize();
+               add(new OnChangeAjaxBehavior() {
                        @Override
-                       public DateTimeFormatter getDateTimeFormatter(Locale 
locale) {
-                               return DateTimeFormatter.ISO_LOCAL_DATE;
+                       protected void 
updateAjaxAttributes(AjaxRequestAttributes attributes) {
+                               super.updateAjaxAttributes(attributes);
+                               attributes.setSerializeRecursively(true);
                        }
-               };
-               HiddenField<LocalDate> date = new HiddenField<>(wicketId, 
model, LocalDate.class) {
-                       private static final long serialVersionUID = 1L;
 
                        @Override
-                       protected IConverter<?> createConverter(Class<?> clazz) 
{
-                               if (LocalDate.class.isAssignableFrom(clazz)) {
-                                       return converter;
-                               }
-                               return null;
+                       protected void onUpdate(AjaxRequestTarget target) {
+                               onValueChanged(target);
                        }
-               };
-               date.add(OnChangeAjaxBehavior.onChange(this::onValueChanged));
-               return date;
+               });
        }
 
        @Override
        protected FormComponent<LocalDate> newInput(String wicketId, String 
dateFormat) {
-               return new LocalDateTextField(wicketId, getModel(), dateFormat);
+               return new LocalDateTextField(wicketId, dateFormat);
        }
 
        protected void onValueChanged(IPartialPageRequestHandler target) {
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/OmDateTimePicker.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/OmDateTimePicker.java
index 5085f90c5..064bc673a 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/OmDateTimePicker.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/OmDateTimePicker.java
@@ -19,48 +19,40 @@
 package org.apache.openmeetings.web.common.datetime;
 
 import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.Locale;
 
 import 
org.apache.wicket.extensions.markup.html.form.datetime.LocalDateTimeTextField;
 import org.apache.wicket.markup.html.form.FormComponent;
-import org.apache.wicket.markup.html.form.HiddenField;
 import org.apache.wicket.model.IModel;
-import org.apache.wicket.util.convert.IConverter;
-import org.apache.wicket.util.convert.converter.LocalDateTimeConverter;
 
-public class OmDateTimePicker extends AbstractOmDateTimePicker<LocalDateTime> {
+import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.form.tempusdominus.AbstractTempusDominusWithIcon;
+import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.form.tempusdominus.TempusDominusConfig;
+import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesome6IconType;
+
+public class OmDateTimePicker extends 
AbstractTempusDominusWithIcon<LocalDateTime> {
        private static final long serialVersionUID = 1L;
 
        public OmDateTimePicker(String id, IModel<LocalDateTime> model) {
-               super(id, model, false);
+               super(id, model, newConfig().withClass(LocalDateTime.class));
        }
 
        @Override
-       protected HiddenField<LocalDateTime> newHidden(String wicketId, 
IModel<LocalDateTime> model) {
-               final IConverter<?> converter = new LocalDateTimeConverter() {
-                       private static final long serialVersionUID = 1L;
-
-                       @Override
-                       public DateTimeFormatter getDateTimeFormatter(Locale 
locale) {
-                               return DateTimeFormatter.ISO_LOCAL_DATE_TIME;
-                       }
-               };
-               return new HiddenField<>(wicketId, model, LocalDateTime.class) {
-                       private static final long serialVersionUID = 1L;
-
-                       @Override
-                       protected IConverter<?> createConverter(Class<?> clazz) 
{
-                               if 
(LocalDateTime.class.isAssignableFrom(clazz)) {
-                                       return converter;
-                               }
-                               return null;
-                       }
-               };
+       protected FormComponent<LocalDateTime> newInput(String wicketId, String 
dateFormat) {
+               return new LocalDateTimeTextField(wicketId, dateFormat);
        }
 
-       @Override
-       protected FormComponent<LocalDateTime> newInput(String wicketId, String 
dateFormat) {
-               return new LocalDateTimeTextField(wicketId, getModel(), 
dateFormat);
+       static TempusDominusConfig newConfig() {
+               return new TempusDominusConfig()
+                               .withAllowInputToggle(true)
+                               .withIcons(cfg -> cfg
+                                               
.withDateIcon(FontAwesome6IconType.calendar_s)
+                                               
.withTimeIcon(FontAwesome6IconType.clock_s)
+                                               
.withUpIcon(FontAwesome6IconType.arrow_up_s)
+                                               
.withDownIcon(FontAwesome6IconType.arrow_down_s)
+                                               
.withPreviousIcon(FontAwesome6IconType.arrow_left_s)
+                                               
.withNextIcon(FontAwesome6IconType.arrow_right_s)
+                                               
.withTodayIcon(FontAwesome6IconType.calendar_check_s)
+                                               
.withClearIcon(FontAwesome6IconType.eraser_s)
+                                               
.withCloseIcon(FontAwesome6IconType.xmark_s)
+                               );
        }
 }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/datepicker-functions.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/datepicker-functions.js
deleted file mode 100644
index c1e8282e1..000000000
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/datepicker-functions.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Licensed under the Apache License, Version 2.0 (the "License") 
http://www.apache.org/licenses/LICENSE-2.0 */
-function omDateTimeInputHasChanged(e, hiddenId, dateOnly) {
-       const fmt = dateOnly ? 'YYYY-MM-DD' : 'YYYY-MM-DDTHH:mm:ss';
-       let val = e.target.value
-               , date = e.date;
-       if (!date) {
-               const mmnt = $(e.target).datetimepicker('date');
-               if (moment.isMoment(mmnt)) {
-                       date = moment(val, mmnt.creationData().format);
-               }
-       }
-       if (date) {
-               val = date.isValid() ? date.clone().locale('en').format(fmt) : 
date.creationData().input;
-       }
-       $('#' + hiddenId).val(val).trigger('change');
-}

Reply via email to