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
The following commit(s) were added to refs/heads/tempus-calendar-6 by this push:
new 5f108e724 calendar6
5f108e724 is described below
commit 5f108e72415460f88b6fe1e59cb8d81ed4db7b2d
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Wed Sep 13 22:51:57 2023 +0700
calendar6
---
.../src/main/front/src/css/_calendar.scss | 6 -
.../web/user/calendar/AppointmentModel.java | 6 +-
.../web/user/calendar/CalendarPanel.java | 41 +++----
.../web/user/calendar/OmCalendarEvent.java | 2 +-
.../web/user/calendar/calendar-functions.js | 134 ++++++++++++++++-----
.../org/apache/openmeetings/util/TestDateTime.java | 26 ----
.../org/apache/openmeetings/web/TestCalendar.java | 4 +-
pom.xml | 2 +-
8 files changed, 129 insertions(+), 92 deletions(-)
diff --git a/openmeetings-web/src/main/front/src/css/_calendar.scss
b/openmeetings-web/src/main/front/src/css/_calendar.scss
index 77b5aa29c..636644e0b 100644
--- a/openmeetings-web/src/main/front/src/css/_calendar.scss
+++ b/openmeetings-web/src/main/front/src/css/_calendar.scss
@@ -1,10 +1,4 @@
/* Licensed under the Apache License, Version 2.0 (the "License")
http://www.apache.org/licenses/LICENSE-2.0 */
-#contents #calendar .fc-gotoBtn-button::before {
- font-family: 'Font Awesome 6 Free';
- font-weight: 900;
- content: "\f133";
- font-size: 1em;
-}
.calendarlist {
padding: 0;
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 15233f33b..137b07b01 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 com.googlecode.wicket.jquery.ui.calendar.CalendarEvent;
-import com.googlecode.wicket.jquery.ui.calendar.CalendarModel;
-import com.googlecode.wicket.jquery.ui.calendar.ICalendarVisitor;
+import com.googlecode.wicket.jquery.ui.calendar6.CalendarEvent;
+import com.googlecode.wicket.jquery.ui.calendar6.CalendarModel;
+import com.googlecode.wicket.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 aa44efedd..05ff0c0b6 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,9 +65,9 @@ import org.slf4j.LoggerFactory;
import com.github.openjson.JSONObject;
import com.googlecode.wicket.jquery.core.Options;
-import com.googlecode.wicket.jquery.ui.calendar.Calendar;
-import com.googlecode.wicket.jquery.ui.calendar.CalendarView;
-import com.googlecode.wicket.jquery.ui.calendar.EventSource.GoogleCalendar;
+import com.googlecode.wicket.jquery.ui.calendar6.Calendar;
+import com.googlecode.wicket.jquery.ui.calendar6.CalendarView;
+import com.googlecode.wicket.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;
@@ -123,26 +123,23 @@ public class CalendarPanel extends UserBasePanel {
dialog = new AppointmentDialog("calendarAppointment", this, new
CompoundPropertyModel<>(getDefault()));
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()
+ Options options = new Options()
+ .set("timeZone", Options.asString("UTC"))
+ .set("customButtons", "{gotoBtn: {text: ' ', click:
onOmGotoClick}}")
+ .set("headerToolbar", "{left:
'prevYear,prev,next,nextYear today,gotoBtn', center: 'title', right:
'dayGridMonth,timeGridWeek,timeGridDay'}")
+ .set("allDaySlot", false)
+ .set("nowIndicator", true)
+ .set("locale",
Options.asString(WebSession.get().getLocale().toLanguageTag()))
+ .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()));
+ .put("today", getString("1555")).toString())
+ .set("themeSystem", Options.asString("bootstrap"))
+ .set("bootstrapFontAwesome", "{close: 'fa-times'," +
+ "prev: 'fa-chevron-left', next:
'fa-chevron-right'," +
+ "prevYear: 'fa-angles-left', nextYear:
'fa-angles-right'," +
+ "gotoBtn: 'fa-calendar'}");
calendar = new Calendar("calendar", new AppointmentModel(),
options) {
private static final long serialVersionUID = 1L;
@@ -153,7 +150,7 @@ public class CalendarPanel extends UserBasePanel {
}
@Override
- public boolean isDayClickEnabled() {
+ public boolean isDateClickEnabled() {
return true;
}
@@ -177,7 +174,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);
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 1e8e98e1f..3fcced075 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 com.googlecode.wicket.jquery.ui.calendar.CalendarEvent;
+import com.googlecode.wicket.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..b935993df 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
@@ -1,35 +1,107 @@
/* Licensed under the Apache License, Version 2.0 (the "License")
http://www.apache.org/licenses/LICENSE-2.0 */
function onOmGotoClick() {
- const gotoBtn = $('#calendar .fc-gotoBtn-button');
- let gotoSpan = gotoBtn.parent().find('.goto-span');
- if (gotoSpan.length < 1) {
- gotoBtn.parent().append($('<span
class="goto-span"><span/></span>'));
+ const calEl = document.querySelector('#calendar');
+ const gotoBtn = calEl.querySelector('.fc-gotoBtn-button');
+
+ if (!gotoBtn.datetimepicker) {
+ gotoBtn.datetimepicker = new
tempusDominus.TempusDominus(gotoBtn, {
+ display: {
+ buttons: {
+ today: true
+ , clear: true
+ , close: true
+ }
+ , components: {
+ clock: false
+ }
+ , icons: {
+ clear: 'fa-solid fa-eraser'
+ , close: 'fa-solid fa-xmark'
+ , date: 'fa-solid fa-calendar'
+ , down: 'fa-solid fa-arrow-down'
+ , next: 'fa-solid fa-arrow-right'
+ , previous: 'fa-solid fa-arrow-left'
+ , time: 'fa-solid fa-clock'
+ , today: 'fa-solid fa-calendar-check'
+ , up: 'fa-solid fa-arrow-up'
+ }
+ }
+ , localization: {
+ locale:
calEl.calendar.currentData.calendarOptions.locale
+ , format: 'L'
+ }
+ });
+ gotoBtn.tdsubscriptions = {
+ change: gotoBtn.datetimepicker.subscribe(
+ tempusDominus.Namespace.events.hide
+ , (e) => calEl.calendar.gotoDate(e.date)
+ )
+ };
}
- gotoSpan = gotoBtn.parent().find('.goto-span');
- gotoSpan.datetimepicker({
- locale: $('#calendar').fullCalendar('option', 'locale')
- , format: 'L'
- , icons: {
- time: 'fas fa-clock'
- , date: 'fas fa-calendar'
- , up: 'fas fa-arrow-up'
- , down: 'fas fa-arrow-down'
- , previous: 'fas fa-chevron-left'
- , next: 'fas fa-chevron-right'
- , today: 'fas fa-calendar-check'
- , clear: 'fas fa-trash'
- , close: 'fas fa-times'
- }
- , buttons: {
- showToday: true
- , showClear: true
- , showClose: true
- }
- });
- gotoSpan
- .off()
- .on('hide.datetimepicker', function(e){
- $('#calendar').fullCalendar('gotoDate',
e.date.startOf('day'));
- })
- .datetimepicker('show');
+ gotoBtn.datetimepicker.show();
}
+
+/*!
+FullCalendar Bootstrap 4 Plugin v6.1.8
+Docs & License: https://fullcalendar.io/docs/bootstrap4
+(c) 2023 Adam Shaw
+*/
+FullCalendar.Bootstrap = (function (exports, core, internal$1) {
+ 'use strict';
+
+ class BootstrapTheme extends internal$1.Theme {
+ }
+ BootstrapTheme.prototype.classes = {
+ root: 'fc-theme-bootstrap',
+ table: 'table-bordered',
+ tableCellShaded: 'table-active',
+ buttonGroup: 'btn-group',
+ button: 'btn btn-primary',
+ buttonActive: 'active',
+ popover: 'popover',
+ popoverHeader: 'popover-header',
+ popoverContent: 'popover-body',
+ };
+ BootstrapTheme.prototype.baseIconClass = 'fa';
+ BootstrapTheme.prototype.iconClasses = {
+ close: 'fa-times',
+ prev: 'fa-chevron-left',
+ next: 'fa-chevron-right',
+ prevYear: 'fa-angle-double-left',
+ nextYear: 'fa-angle-double-right',
+ };
+ BootstrapTheme.prototype.rtlIconClasses = {
+ prev: 'fa-chevron-right',
+ next: 'fa-chevron-left',
+ prevYear: 'fa-angle-double-right',
+ nextYear: 'fa-angle-double-left',
+ };
+ BootstrapTheme.prototype.iconOverrideOption = 'bootstrapFontAwesome'; //
TODO: make TS-friendly. move the option-processing into this plugin
+ BootstrapTheme.prototype.iconOverrideCustomButtonOption =
'bootstrapFontAwesome';
+ BootstrapTheme.prototype.iconOverridePrefix = 'fa-';
+
+ var css_248z = ".fc-theme-bootstrap
a:not([href]){color:inherit}.fc-theme-bootstrap
.fc-more-link:hover{text-decoration:none}";
+ internal$1.injectStyles(css_248z);
+
+ var plugin = core.createPlugin({
+ name: '@fullcalendar/bootstrap',
+ themeClasses: {
+ bootstrap: BootstrapTheme,
+ },
+ });
+
+ var internal = {
+ __proto__: null,
+ BootstrapTheme: BootstrapTheme
+ };
+
+ core.globalPlugins.push(plugin);
+
+ exports.Internal = internal;
+ exports["default"] = plugin;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+ return exports;
+
+})({}, FullCalendar, FullCalendar.Internal);
diff --git
a/openmeetings-web/src/test/java/org/apache/openmeetings/util/TestDateTime.java
b/openmeetings-web/src/test/java/org/apache/openmeetings/util/TestDateTime.java
index 397d06cd5..29202eb72 100644
---
a/openmeetings-web/src/test/java/org/apache/openmeetings/util/TestDateTime.java
+++
b/openmeetings-web/src/test/java/org/apache/openmeetings/util/TestDateTime.java
@@ -30,7 +30,6 @@ import java.util.Date;
import java.util.Locale;
import org.apache.openmeetings.RegularTest;
-import org.apache.openmeetings.web.common.datetime.AbstractOmDateTimePicker;
import org.junit.jupiter.api.Test;
@RegularTest
@@ -76,29 +75,4 @@ class TestDateTime {
.toFormatter(Locale.ENGLISH);
assertNotNull(formatter1.parse(jsDateStr));
}
-
- @Test
- void test3() throws Exception {
- final Locale loc = new Locale.Builder()
- .setLanguage("fr")
- .setRegion("CA")
- .build();
- final String result = Runtime.version().feature() < 17
- ? "yy-MM-dd HH [h] mm" // java 11
- : "y-MM-dd HH [h] mm"; // java 17
- String format = AbstractOmDateTimePicker.getDateTimeFormat(loc);
- assertEquals(result, AbstractOmDateTimePicker.patch(format));
- format =
AbstractOmDateTimePicker.getDateTimeFormat(Locale.ENGLISH);
- assertEquals(format, AbstractOmDateTimePicker.patch(format));
- }
-
- @Test
- void test4() throws Exception {
- final Locale loc = new Locale.Builder()
- .setLanguage("bg")
- .setRegion("BG")
- .build();
- String format = AbstractOmDateTimePicker.getDateTimeFormat(loc);
- assertEquals("d.MM.yy [г]., H:mm [ч].",
AbstractOmDateTimePicker.patch(format));
- }
}
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 31d8026d3..140b8c835 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
@@ -34,7 +34,7 @@ import org.apache.wicket.behavior.AbstractAjaxBehavior;
import org.apache.wicket.util.tester.FormTester;
import org.junit.jupiter.api.Test;
-import com.googlecode.wicket.jquery.ui.calendar.CalendarView;
+import com.googlecode.wicket.jquery.ui.calendar6.CalendarView;
import de.agilecoders.wicket.core.markup.html.bootstrap.navbar.Navbar;
@@ -58,7 +58,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 78dc8a1d1..4037a4669 100644
--- a/pom.xml
+++ b/pom.xml
@@ -85,7 +85,7 @@
<!-- dependency versions -->
<junit.version>5.10.0</junit.version>
<wicket.version>9.15.0-SNAPSHOT</wicket.version>
- <wicket-jquery-ui.version>9.12.0</wicket-jquery-ui.version>
+
<wicket-jquery-ui.version>9.12.1-SNAPSHOT</wicket-jquery-ui.version>
<wicketstuff.version>9.14.0</wicketstuff.version>
<wicket-bootstrap.version>6.0.5-SNAPSHOT</wicket-bootstrap.version>
<spring.version>5.3.29</spring.version>