You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2024/06/26 08:30:38 UTC
(openmeetings) 01/01: [OPENMEETINGS-2784] calendar v6 seems to work as expected
This is an automated email from the ASF dual-hosted git repository.
solomax pushed a commit to branch calendar6
in repository https://gitbox.apache.org/repos/asf/openmeetings.git
commit f447e35edbed43ca50c4f5806a7bf4fa08f65239
Author: Maxim Solodovnik <so...@apache.org>
AuthorDate: Wed Jun 26 15:30:22 2024 +0700
[OPENMEETINGS-2784] calendar v6 seems to work as expected
---
openmeetings-web/pom.xml | 4 ++
openmeetings-web/src/main/java/module-info.java | 8 +--
.../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 | 8 ++-
8 files changed, 74 insertions(+), 42 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/module-info.java b/openmeetings-web/src/main/java/module-info.java
index 7630d283b..b8f956224 100644
--- a/openmeetings-web/src/main/java/module-info.java
+++ b/openmeetings-web/src/main/java/module-info.java
@@ -54,10 +54,10 @@ module org.apache.openmeetings.web {
requires org.wicketstuff.urlfragment;
requires org.wicketstuff.jqplot;
requires org.wicketstuff.jqplot4j;
- requires wicketstuff.jquery.ui;
- requires wicketstuff.jquery.ui.calendar;
- requires wicketstuff.jquery.ui.core;
- requires wicketstuff.jquery.ui.plugins;
+ requires org.wicketstuff.jquery.ui;
+ requires org.wicketstuff.jquery.ui.calendar;
+ requires org.wicketstuff.jquery.ui.core;
+ requires org.wicketstuff.jquery.ui.plugins;
requires wicket.bootstrap.extensions;
requires wicket.bootstrap.core;
requires wicket.bootstrap.themes;
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..b62f24926 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("axisFormat", Options.asString("H(:mm)"))
+ .set("defaultEventMinutes", 60)
+ .set("timeFormat", Options.asString("H(:mm)"))
+
+ .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 7d49d90e0..3a015a507 100644
--- a/pom.xml
+++ b/pom.xml
@@ -84,8 +84,9 @@
<!-- dependency versions -->
<junit.version>5.10.2</junit.version>
<wicket.version>10.1.0</wicket.version>
- <wicketstuff.version>10.1.1</wicketstuff.version>
+ <wicketstuff.version>10.2.0-SNAPSHOT</wicketstuff.version>
<wicket-bootstrap.version>7.0.5</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>