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>