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

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new 472ba62cc [OPENMEETINGS-2784] Switching to Calendar6 (#192)
472ba62cc is described below

commit 472ba62ccde25216ba508cf13a69ed2b97ebace6
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Wed Jul 3 21:00:39 2024 +0700

    [OPENMEETINGS-2784] Switching to Calendar6 (#192)
    
    [OPENMEETINGS-2784] calendar v6 seems to work as expected
---
 openmeetings-web/pom.xml                           |  4 ++
 .../web/user/calendar/AppointmentModel.java        |  6 +-
 .../web/user/calendar/CalendarPanel.java           | 80 ++++++++++++++--------
 .../web/user/calendar/OmCalendarEvent.java         |  2 +-
 .../web/user/calendar/calendar-functions.js        |  4 +-
 .../org/apache/openmeetings/web/TestCalendar.java  |  4 +-
 pom.xml                                            |  6 ++
 7 files changed, 69 insertions(+), 37 deletions(-)

diff --git a/openmeetings-web/pom.xml b/openmeetings-web/pom.xml
index d249ac4cc..653691240 100644
--- a/openmeetings-web/pom.xml
+++ b/openmeetings-web/pom.xml
@@ -465,6 +465,10 @@
                        <groupId>org.webjars</groupId>
                        <artifactId>jquery-ui-touch-punch</artifactId>
                </dependency>
+               <dependency>
+                       <groupId>org.webjars.npm</groupId>
+                       <artifactId>fullcalendar__bootstrap5</artifactId>
+               </dependency>
                <dependency>
                        <groupId>dev.samstevens.totp</groupId>
                        <artifactId>totp</artifactId>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java
index 3b58b5167..95aca466d 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java
@@ -28,9 +28,9 @@ import java.util.List;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 
-import org.wicketstuff.jquery.ui.calendar.CalendarEvent;
-import org.wicketstuff.jquery.ui.calendar.CalendarModel;
-import org.wicketstuff.jquery.ui.calendar.ICalendarVisitor;
+import org.wicketstuff.jquery.ui.calendar6.CalendarEvent;
+import org.wicketstuff.jquery.ui.calendar6.CalendarModel;
+import org.wicketstuff.jquery.ui.calendar6.ICalendarVisitor;
 
 public class AppointmentModel extends CalendarModel implements 
ICalendarVisitor {
        private static final long serialVersionUID = 1L;
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java
index 4703db21b..1ae2e5c5b 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java
@@ -65,18 +65,21 @@ import org.slf4j.LoggerFactory;
 
 import com.github.openjson.JSONObject;
 import org.wicketstuff.jquery.core.Options;
-import org.wicketstuff.jquery.ui.calendar.Calendar;
-import org.wicketstuff.jquery.ui.calendar.CalendarView;
-import org.wicketstuff.jquery.ui.calendar.EventSource.GoogleCalendar;
+import org.wicketstuff.jquery.ui.calendar6.Calendar;
+import org.wicketstuff.jquery.ui.calendar6.CalendarView;
+import org.wicketstuff.jquery.ui.calendar6.DateTimeDelta;
+import org.wicketstuff.jquery.ui.calendar6.EventSource.GoogleCalendar;
 
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxLink;
 import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
+import 
de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference;
 import jakarta.inject.Inject;
 
 public class CalendarPanel extends UserBasePanel {
        private static final Logger log = 
LoggerFactory.getLogger(CalendarPanel.class);
        private static final long serialVersionUID = 1L;
        private static final ResourceReference CALJS = new 
JavaScriptResourceReference(CalendarPanel.class, "calendar-functions.js");
+       private static final ResourceReference BS5_THEME = new 
WebjarsJavaScriptResourceReference("fullcalendar__bootstrap5/current/index.global.js");
        private final AbstractAjaxTimerBehavior refreshTimer = new 
AbstractAjaxTimerBehavior(Duration.ofSeconds(10)) {
                private static final long serialVersionUID = 1L;
 
@@ -125,25 +128,34 @@ public class CalendarPanel extends UserBasePanel {
                add(dialog);
 
                boolean isRtl = isRtl();
-               Options options = new Options();
-               options.set("isRTL", isRtl);
-               options.set("height", Options.asString("parent"));
-               options.set("customButtons", "{gotoBtn: {text: ' ', click: 
onOmGotoClick}}");
-               options.set("header", isRtl ? "{left: 
'agendaDay,agendaWeek,month', center: 'title', right: 'gotoBtn,today 
nextYear,next,prev,prevYear'}"
-                               : "{left: 'prevYear,prev,next,nextYear 
today,gotoBtn', center: 'title', right: 'month,agendaWeek,agendaDay'}");
-               options.set("allDaySlot", false);
-               options.set("axisFormat", Options.asString("H(:mm)"));
-               options.set("defaultEventMinutes", 60);
-               options.set("timeFormat", Options.asString("H(:mm)"));
-               options.set("themeSystem", Options.asString("bootstrap4"));
-
-               options.set("buttonText", new JSONObject()
-                               .put("month", getString("801"))
-                               .put("week", getString("800"))
-                               .put("day", getString("799"))
-                               .put("today", getString("1555")).toString());
-
-               options.set("locale", 
Options.asString(WebSession.get().getLocale().toLanguageTag()));
+               Options options = new Options()
+                               .set("direction", Options.asString(isRtl ? 
"rtl" : "ltr"))
+                               .set("height", Options.asString("100%"))
+                               .set("customButtons", "{gotoBtn: {text: ' ', 
click: onOmGotoClick}}")
+                               .set("headerToolbar", isRtl
+                                               ? "{left: 
'timeGridDay,timeGridWeek,dayGridMonth', center: 'title', right: 'gotoBtn,today 
nextYear,next,prev,prevYear'}"
+                                               : "{left: 
'prevYear,prev,next,nextYear today,gotoBtn', center: 'title', right: 
'dayGridMonth,timeGridWeek,timeGridDay'}")
+                               .set("allDaySlot", false)
+                               .set("nowIndicator", true)
+                               .set("defaultTimedEventDuration", 
Options.asString("01:00"))
+                               .set("selectMirror", true)
+
+                               .set("themeSystem", 
Options.asString("bootstrap5"))
+                               .set("buttonIcons", new JSONObject()
+                                               .put("close", "bi fa-solid 
fa-times")
+                                               .put("prev", "bi fa-solid 
fa-chevron-left")
+                                               .put("next", "bi fa-solid 
fa-chevron-right")
+                                               .put("prevYear", "bi fa-solid 
fa-angles-left")
+                                               .put("nextYear", "bi fa-solid 
fa-angles-right")
+                                               .toString())
+                               .set("buttonText", new JSONObject()
+                                               .put("month", getString("801"))
+                                               .put("week", getString("800"))
+                                               .put("day", getString("799"))
+                                               .put("today", getString("1555"))
+                                               .toString())
+
+                               .set("locale", 
Options.asString(WebSession.get().getLocale().toLanguageTag()));
 
                calendar = new Calendar("calendar", new AppointmentModel(), 
options) {
                        private static final long serialVersionUID = 1L;
@@ -154,7 +166,7 @@ public class CalendarPanel extends UserBasePanel {
                        }
 
                        @Override
-                       public boolean isDayClickEnabled() {
+                       public boolean isDateClickEnabled() {
                                return true;
                        }
 
@@ -178,7 +190,7 @@ public class CalendarPanel extends UserBasePanel {
                        public void onSelect(AjaxRequestTarget target, 
CalendarView view, LocalDateTime start, LocalDateTime end, boolean allDay) {
                                Appointment a = getDefault();
                                LocalDateTime s = start, e = end;
-                               if (CalendarView.month == view) {
+                               if (CalendarView.dayGridMonth == view) {
                                        LocalDateTime now = 
ZonedDateTime.now(getZoneId()).toLocalDateTime();
                                        s = 
start.withHour(now.getHour()).withMinute(now.getMinute());
                                        e = s.plus(1, ChronoUnit.HOURS);
@@ -202,7 +214,7 @@ public class CalendarPanel extends UserBasePanel {
                        }
 
                        @Override
-                       public void onEventDrop(AjaxRequestTarget target, 
String eventId, long delta, boolean allDay) {
+                       public void onEventDrop(AjaxRequestTarget target, 
String eventId, DateTimeDelta delta, boolean allDay) {
                                if (!StringUtils.isNumeric(eventId)) {
                                        refresh(target);
                                        return;
@@ -213,11 +225,17 @@ public class CalendarPanel extends UserBasePanel {
                                }
                                java.util.Calendar cal = 
WebSession.getCalendar();
                                cal.setTime(a.getStart());
-                               cal.add(java.util.Calendar.MILLISECOND, 
(int)delta);
+                               cal.add(java.util.Calendar.YEAR, delta.years());
+                               cal.add(java.util.Calendar.MONTH, 
delta.months());
+                               cal.add(java.util.Calendar.DAY_OF_MONTH, 
delta.days());
+                               cal.add(java.util.Calendar.MILLISECOND, 
delta.millis());
                                a.setStart(cal.getTime());
 
                                cal.setTime(a.getEnd());
-                               cal.add(java.util.Calendar.MILLISECOND, 
(int)delta);
+                               cal.add(java.util.Calendar.YEAR, delta.years());
+                               cal.add(java.util.Calendar.MONTH, 
delta.months());
+                               cal.add(java.util.Calendar.DAY_OF_MONTH, 
delta.days());
+                               cal.add(java.util.Calendar.MILLISECOND, 
delta.millis());
                                a.setEnd(cal.getTime());
 
                                apptDao.update(a, getUserId());
@@ -228,7 +246,7 @@ public class CalendarPanel extends UserBasePanel {
                        }
 
                        @Override
-                       public void onEventResize(AjaxRequestTarget target, 
String eventId, long delta) {
+                       public void onEventResize(AjaxRequestTarget target, 
String eventId, DateTimeDelta delta) {
                                if (!StringUtils.isNumeric(eventId)) {
                                        refresh(target);
                                        return;
@@ -239,7 +257,10 @@ public class CalendarPanel extends UserBasePanel {
                                }
                                java.util.Calendar cal = 
WebSession.getCalendar();
                                cal.setTime(a.getEnd());
-                               cal.add(java.util.Calendar.MILLISECOND, 
(int)delta);
+                               cal.add(java.util.Calendar.YEAR, delta.years());
+                               cal.add(java.util.Calendar.MONTH, 
delta.months());
+                               cal.add(java.util.Calendar.DAY_OF_MONTH, 
delta.days());
+                               cal.add(java.util.Calendar.MILLISECOND, 
delta.millis());
                                a.setEnd(cal.getTime());
 
                                apptDao.update(a, getUserId());
@@ -341,6 +362,7 @@ public class CalendarPanel extends UserBasePanel {
                super.renderHead(response);
                response.render(JavaScriptHeaderItem.forReference(CALJS));
                
response.render(JavaScriptHeaderItem.forReference(TouchPunchResourceReference.instance()));
+               response.render(JavaScriptHeaderItem.forReference(BS5_THEME));
        }
 
        // Client creation here, because the client is not created until 
necessary
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/OmCalendarEvent.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/OmCalendarEvent.java
index 007699625..4b8728c73 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/OmCalendarEvent.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/OmCalendarEvent.java
@@ -22,7 +22,7 @@ import static 
org.apache.openmeetings.web.util.CalendarWebHelper.getDateTime;
 
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 
-import org.wicketstuff.jquery.ui.calendar.CalendarEvent;
+import org.wicketstuff.jquery.ui.calendar6.CalendarEvent;
 
 public class OmCalendarEvent extends CalendarEvent {
        private static final long serialVersionUID = 1L;
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/calendar-functions.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/calendar-functions.js
index 7949f5286..3a42ab081 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/calendar-functions.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/calendar-functions.js
@@ -7,7 +7,7 @@ function onOmGotoClick() {
        }
        gotoSpan = gotoBtn.parent().find('.goto-span');
        gotoSpan.datetimepicker({
-               locale: $('#calendar').fullCalendar('option', 'locale')
+               locale: 
document.querySelector('#calendar').calendar.getOption('locale')
                , format: 'L'
                , icons: {
                        time: 'fas fa-clock'
@@ -29,7 +29,7 @@ function onOmGotoClick() {
        gotoSpan
                .off()
                .on('hide.datetimepicker', function(e){
-                       $('#calendar').fullCalendar('gotoDate', 
e.date.startOf('day'));
+                       
document.querySelector('#calendar').calendar.gotoDate(e.date.startOf('day').toDate());
                })
                .datetimepicker('show');
 }
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestCalendar.java 
b/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestCalendar.java
index 9884d35dc..4d6557f59 100644
--- 
a/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestCalendar.java
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestCalendar.java
@@ -33,7 +33,7 @@ import org.apache.wicket.behavior.AbstractAjaxBehavior;
 import org.apache.wicket.util.tester.FormTester;
 import org.junit.jupiter.api.Test;
 
-import org.wicketstuff.jquery.ui.calendar.CalendarView;
+import org.wicketstuff.jquery.ui.calendar6.CalendarView;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.navbar.Navbar;
 
@@ -57,7 +57,7 @@ class TestCalendar extends AbstractWicketTesterTest {
                        tester.getRequest().setParameter("allDay", 
String.valueOf(false));
                        tester.getRequest().setParameter("startDate", 
LocalDateTime.of(2017, 11, 13, 13, 13).toString());
                        tester.getRequest().setParameter("endDate", 
LocalDateTime.of(2017, 11, 13, 13, 13).toString());
-                       tester.getRequest().setParameter("viewName", 
CalendarView.month.name());
+                       tester.getRequest().setParameter("viewName", 
CalendarView.dayGridMonth.name());
                        
tester.executeBehavior((AbstractAjaxBehavior)cal.get("form:calendar").getBehaviorById(0));
 //select-event
                        FormTester appTester = 
tester.newFormTester(PATH_APPOINTMENT_DLG_FRM);
                        //check inviteeType:groupContainer:groups is invisible 
for regular user
diff --git a/pom.xml b/pom.xml
index 124290f08..ce119f801 100644
--- a/pom.xml
+++ b/pom.xml
@@ -86,6 +86,7 @@
                <wicket.version>10.1.0</wicket.version>
                <wicketstuff.version>10.2.0-SNAPSHOT</wicketstuff.version>
                
<wicket-bootstrap.version>7.0.7-SNAPSHOT</wicket-bootstrap.version>
+               <fullcalendar.version>6.1.14</fullcalendar.version>
                <spring.version>6.1.10</spring.version>
                <tomcat.version>10.1.25</tomcat.version>
                <jetty.version>11.0.21</jetty.version>
@@ -507,6 +508,11 @@
                                <artifactId>spring-web</artifactId>
                                <version>${spring.version}</version>
                        </dependency>
+                       <dependency>
+                               <groupId>org.webjars.npm</groupId>
+                               
<artifactId>fullcalendar__bootstrap5</artifactId>
+                               <version>${fullcalendar.version}</version>
+                       </dependency>
                        <dependency>
                                <groupId>org.mnode.ical4j</groupId>
                                <artifactId>ical4j</artifactId>

Reply via email to