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 <solo...@apache.org> 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>