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 2020/02/16 03:26:06 UTC

[openmeetings] branch csp updated: [OPENMEETINGS-2165] calendar seems to work

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

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


The following commit(s) were added to refs/heads/csp by this push:
     new b582c50  [OPENMEETINGS-2165] calendar seems to work
b582c50 is described below

commit b582c50f1eb0ac62be8803789894488d8fdbc0f0
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Sun Feb 16 10:25:49 2020 +0700

    [OPENMEETINGS-2165] calendar seems to work
---
 .../web/app/Application.properties.xml             |   1 +
 .../web/app/Application_ar.properties.xml          |   1 +
 .../web/app/Application_bg.properties.xml          |   1 +
 .../web/app/Application_bn.properties.xml          |   1 +
 .../web/app/Application_ca.properties.xml          |   1 +
 .../web/app/Application_cs.properties.xml          |   1 +
 .../web/app/Application_da.properties.xml          |   1 +
 .../web/app/Application_de.properties.xml          |   1 +
 .../web/app/Application_el.properties.xml          |   1 +
 .../web/app/Application_es.properties.xml          |   1 +
 .../web/app/Application_fa.properties.xml          |   1 +
 .../web/app/Application_fi.properties.xml          |   1 +
 .../web/app/Application_fr.properties.xml          |   1 +
 .../web/app/Application_gl.properties.xml          |   1 +
 .../web/app/Application_he.properties.xml          |   1 +
 .../web/app/Application_hu.properties.xml          |   1 +
 .../web/app/Application_in.properties.xml          |   1 +
 .../web/app/Application_it.properties.xml          |   1 +
 .../web/app/Application_ja.properties.xml          |   1 +
 .../web/app/Application_ko.properties.xml          |   1 +
 .../web/app/Application_nl.properties.xml          |   1 +
 .../web/app/Application_pl.properties.xml          |   1 +
 .../web/app/Application_pt.properties.xml          |   1 +
 .../web/app/Application_pt_BR.properties.xml       |   1 +
 .../web/app/Application_ru.properties.xml          |   1 +
 .../web/app/Application_sk.properties.xml          |   1 +
 .../web/app/Application_sv.properties.xml          |   1 +
 .../web/app/Application_th.properties.xml          |   1 +
 .../web/app/Application_tr.properties.xml          |   1 +
 .../web/app/Application_uk.properties.xml          |   1 +
 .../web/app/Application_zh_CN.properties.xml       |   1 +
 .../web/app/Application_zh_TW.properties.xml       |   1 +
 .../openmeetings/web/common/AjaxOmDatePicker.java  |   8 +-
 .../openmeetings/web/common/OmDateTimePicker.java  |   4 +-
 .../web/user/calendar/AppointmentDialog.html       | 140 ++++++++++-----------
 .../web/user/calendar/AppointmentDialog.java       |   6 +-
 .../user/calendar/CalendarFunctionsBehavior.java   |  58 ---------
 .../web/user/calendar/CalendarPanel.html           |   4 +-
 .../web/user/calendar/CalendarPanel.java           |  38 +++---
 .../web/user/calendar/calendar-functions.js        |  72 +++++------
 .../src/main/webapp/css/raw-calendar.css           |  28 +----
 .../src/main/webapp/css/raw-general.css            |   1 +
 42 files changed, 169 insertions(+), 222 deletions(-)

diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
index 10d31b8..33e5fb9 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
index 6e18473..3247810 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
index 2e2f008..05af5ac 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml
index 8936a3a..c013b85 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
index 11fee8d..f2c6d6d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
index e0649e8..02d574c 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
index a3b6c9b..cbb5cdc 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml
index 554dee3..1f78cb5 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
index 20da748..6757c6e 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml
index a10ee07..d7920d5 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
index 9992b24..c0ae07f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA[رمز عبور ضعیف حداقل 1 حرف بزرگ ضروری است]]></entry>
 	<entry key="button.label.share"><![CDATA[به اشتراک بگذارید]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[تقویم خارجی اضافه کنید]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[تقویم جدید]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[جزییات تقویم]]></entry>
 	<entry key="calendar.error"><![CDATA[خطا در برقراری اتصال روی URL مشخص شده]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
index 24632ee..abdb125 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
index 3653b3a..f3fd3a3 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
index 220ec95..1de5b6d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_he.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_he.properties.xml
index 10d31b8..33e5fb9 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_he.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_he.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
index 5455670..e5ce99d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_in.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_in.properties.xml
index 858af2e..aff1fd7 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_in.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_in.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml
index 1d15225..77bc44f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Condividi]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
index c0940ba..4a9151f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA[パスワード強度='弱': 1文字以上の大文字を含める必要があります。]]></entry>
 	<entry key="button.label.share"><![CDATA[共有]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[外部カレンダーを追加]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[新規カレンダー]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[カレンダー詳細]]></entry>
 	<entry key="calendar.error"><![CDATA[エラー。指定された URL に接続できませんでした。]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
index a2dd1a1..78d74e7 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
index 2ee404c..ce5558d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
index c3af5f3..b7e060d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA[„Słabe” hasło: wymagana jest co najmniej 1 wielka litera]]></entry>
 	<entry key="button.label.share"><![CDATA[Udostępnij]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Dodaj kalendarz zewnętrzny]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[Nowy kalendarz]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Szczegóły kalendarza]]></entry>
 	<entry key="calendar.error"><![CDATA[Błąd podczas nawiązywania połączenia pod określonym adresem URL.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
index ea2a38f..5079e57 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
index d9ed34b..445e423 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
index 926bac5..92aff73 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Слабый' пароль: обязателена по крайней мере одна прописная буква]]></entry>
 	<entry key="button.label.share"><![CDATA[Поделиться]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Синхр]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
index 1ee65e4..a270746 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
index a1c27b0..f70119b 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
index 7666c5a..8a1e9c2 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
index 335de01..e6015c0 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
index 78e37fb..be69584 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
index 2780515..974f119 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
index 15de706..d3aa414 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
@@ -615,6 +615,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="bad.password.upper"><![CDATA['Weak' password: at least 1 upper-case letter is required]]></entry>
 	<entry key="button.label.share"><![CDATA[Share]]></entry>
 	<entry key="calendar.addCalendar"><![CDATA[Add External Calendar]]></entry>
+	<entry key="calendar.sync"><![CDATA[Sync]]></entry>
 	<entry key="calendar.defaultTitle"><![CDATA[New Calendar]]></entry>
 	<entry key="calendar.dialogTitle"><![CDATA[Calendar Details]]></entry>
 	<entry key="calendar.error"><![CDATA[Error in making connection on the URL specified.]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AjaxOmDatePicker.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AjaxOmDatePicker.java
index 82811cd..79c4b98 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AjaxOmDatePicker.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AjaxOmDatePicker.java
@@ -20,11 +20,11 @@ package org.apache.openmeetings.web.common;
 
 import java.time.LocalDate;
 
-import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.extensions.markup.html.form.datetime.LocalDateTextField;
+import org.apache.wicket.markup.html.form.FormComponent;
 import org.apache.wicket.model.IModel;
 
 public class AjaxOmDatePicker extends AbstractOmDateTimePicker<LocalDate> {
@@ -35,8 +35,9 @@ public class AjaxOmDatePicker extends AbstractOmDateTimePicker<LocalDate> {
 	}
 
 	@Override
-	protected Component newInput(String wicketId, String dateFormat) {
-		return new LocalDateTextField(wicketId, getModel(), dateFormat).add(new OnChangeAjaxBehavior() {
+	protected FormComponent<LocalDate> newInput(String wicketId, String dateFormat) {
+		LocalDateTextField input = new LocalDateTextField(wicketId, getModel(), dateFormat);
+		input.add(new OnChangeAjaxBehavior() {
 			private static final long serialVersionUID = 1L;
 
 			@Override
@@ -44,6 +45,7 @@ public class AjaxOmDatePicker extends AbstractOmDateTimePicker<LocalDate> {
 				onValueChanged(target);
 			}
 		});
+		return input;
 	}
 
 	protected void onValueChanged(IPartialPageRequestHandler target) {
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmDateTimePicker.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmDateTimePicker.java
index 0787b42..09e2c4e 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmDateTimePicker.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmDateTimePicker.java
@@ -20,8 +20,8 @@ package org.apache.openmeetings.web.common;
 
 import java.time.LocalDateTime;
 
-import org.apache.wicket.Component;
 import org.apache.wicket.extensions.markup.html.form.datetime.LocalDateTimeTextField;
+import org.apache.wicket.markup.html.form.FormComponent;
 import org.apache.wicket.model.IModel;
 
 public class OmDateTimePicker extends AbstractOmDateTimePicker<LocalDateTime> {
@@ -32,7 +32,7 @@ public class OmDateTimePicker extends AbstractOmDateTimePicker<LocalDateTime> {
 	}
 
 	@Override
-	protected Component newInput(String wicketId, String dateFormat) {
+	protected FormComponent<LocalDateTime> newInput(String wicketId, String dateFormat) {
 		return new LocalDateTimeTextField(wicketId, getModel(), dateFormat);
 	}
 }
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html
index adf47c2..6af3af8 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html
@@ -30,91 +30,89 @@
 				<li class="nav-item"><a class="nav-link" id="tab3-tab" data-toggle="tab" role="tab" aria-controls="tab3" href="#tab3"><wicket:message key="appointment.tab.advanced"/></a></li>
 			</ul>
 			<div class="tab-content">
-				<div id="tab1" class="tab-pane fade show active" role="tabpanel" aria-labelledby="tab1-tab">
-					<div class="table">
-						<div>
-							<div class="column label"><wicket:message key="572" /></div>
-							<div class="column data"><input type="text" wicket:id="title" /></div>
-						</div>
-						<div>
-							<div class="column label"><wicket:message key="570" /></div>
-							<div class="column data"><span class="date time picker" wicket:id="start"></span></div>
-						</div>
+				<div id="tab1" class="tab-pane fade show active pt-1" role="tabpanel" aria-labelledby="tab1-tab">
+					<div>
+						<label wicket:for="title" class="col-3 p-0"><wicket:message key="572" /></label>
+						<input class="col-8" type="text" wicket:id="title" />
+					</div>
+					<div>
+						<label wicket:for="start" class="col-3 p-0"><wicket:message key="570" /></label>
+						<div class="d-inline-block col-8 p-0"><span class="date time picker" wicket:id="start"></span></div>
+					</div>
+					<div>
+						<label wicket:for="end" class="col-3 p-0"><wicket:message key="571" /></label>
+						<div class="d-inline-block col-8 p-0"><span class="date time picker" wicket:id="end"></span></div>
+					</div>
+					<div wicket:id="owner-row">
+						<label class="col-3 p-0"><wicket:message key="1156" /></label>
+						<span class="col-8" wicket:id="aowner"></span>
+					</div>
+					<div wicket:id="inviteeType">
 						<div>
-							<div class="column label"><wicket:message key="571" /></div>
-							<div class="column data"><span class="date time picker" wicket:id="end"></span></div>
-						</div>
-						<div wicket:id="owner-row">
-							<div class="column label"><wicket:message key="1156" /></div>
-							<div class="column data"><span wicket:id="aowner"></span></div>
-						</div>
-						<div wicket:id="inviteeType">
-							<div>
-								<div class="column label"><input type="radio" wicket:id="user"/><label wicket:for="user"><wicket:message key="803" /></label></div>
-								<div class="column data om-select2" wicket:message="title:1588"><select class="appointment attendees input" wicket:id="attendees"></select></div>
-							</div>
-							<div wicket:id="groupContainer">
-								<div class="column label"><input type="radio" wicket:id="group"/><label wicket:for="group"><wicket:message key="126" /></label></div>
-								<div class="column data om-select2"><select wicket:id="groups" class="input invitees"></select></div>
+							<label wicket:for="attendees" class="col-3 p-0"><input type="radio" wicket:id="user"/><label wicket:for="user"><wicket:message key="803" /></label></label>
+							<div class="om-select2 p-0 d-inline-block col-8" wicket:message="title:1588">
+								<select class="attendees w-100" wicket:id="attendees"></select>
 							</div>
 						</div>
-						<div>
-							<div class="column label"><wicket:message key="569" /></div>
-							<div class="column data"><input type="text" wicket:id="location" /></div>
-						</div>
-						<div>
-							<div class="column label"><wicket:message key="196" /></div>
-							<div class="column data">
-								<div wicket:id="toolbarContainer"></div>
-								<div wicket:id="description"></div>
+						<div wicket:id="groupContainer">
+							<label wicket:for="groups" class="col-3 p-0"><input type="radio" wicket:id="group"/><label wicket:for="group"><wicket:message key="126" /></label></label>
+							<div class="om-select2 p-0 d-inline-block col-8">
+								<select wicket:id="groups" class="input invitees w-100"></select>
 							</div>
 						</div>
 					</div>
-				</div>
-				<div id="tab2" class="tab-pane fade" role="tabpanel" aria-labelledby="tab2-tab">
-					<div class="table">
-						<div wicket:enclosure="createRoom">
-							<input type="checkbox" wicket:id="createRoom" /><label wicket:for="createRoom"><wicket:message key="1509" /></label>
-						</div>
-						<div wicket:id="create-room-block">
-							<div>
-								<div class="column label"><wicket:message key="619" /></div>
-								<div class="column data"><select wicket:id="type" ></select></div>
-							</div>
-							<div>
-								<div class="column label"><label wicket:for="moderated"><wicket:message key="640" /></label></div>
-								<div class="column data"><input type="checkbox" wicket:id="moderated" /></div>
-							</div>
-						</div>
-						<div>
-							<div class="column label"><wicket:message key="406" /></div>
-							<div class="column data"><select wicket:id="groom" ></select></div>
-						</div>
-						<div wicket:id="sip-container">
-							<div class="column label"><wicket:message key="1003"/></div>
-							<div class="column data"><span wicket:id="room.confno"></span></div>
+					<div>
+						<label wicket:for="location" class="col-3 p-0"><wicket:message key="569" /></label>
+						<input class="col-8" type="text" wicket:id="location" />
+					</div>
+					<div>
+						<label wicket:for="description" class="col-3 p-0"><wicket:message key="196" /></label>
+						<div class="d-inline-block col-8 p-0">
+							<div wicket:id="toolbarContainer"></div>
+							<div wicket:id="description"></div>
 						</div>
 					</div>
 				</div>
-				<div id="tab3" class="tab-pane fade" role="tabpanel" aria-labelledby="tab3-tab">
-					<div class="table">
-						<div>
-							<div class="column label"><wicket:message key="565" /></div>
-							<div class="column data"><select wicket:id="reminder" ></select></div>
-						</div>
-						<div>
-							<input type="checkbox" wicket:id="passwordProtected" /><label wicket:for="passwordProtected"><wicket:message key="524" /></label>
-						</div>
+				<div id="tab2" class="tab-pane fade pt-1" role="tabpanel" aria-labelledby="tab2-tab">
+					<div wicket:enclosure="createRoom">
+						<input type="checkbox" wicket:id="createRoom" /><label wicket:for="createRoom"><wicket:message key="1509" /></label>
+					</div>
+					<div wicket:id="create-room-block">
 						<div>
-							<div class="column label"><wicket:message key="110" /></div>
-							<div class="column data"><input type="password" wicket:id="password" /></div>
+							<label wicket:for="type" class="col-3 p-0"><wicket:message key="619" /></label>
+							<select class="custom-select col-8" wicket:id="type" ></select>
 						</div>
-						<div><wicket:message key="1445" /></div>
 						<div>
-							<div class="column label"><wicket:message key="162" /></div>
-							<div class="column data"><select wicket:id="calendar"></select></div>
+							<label class="col-3 p-0" wicket:for="moderated"><wicket:message key="640" /></label>
+							<input type="checkbox" wicket:id="moderated" />
 						</div>
 					</div>
+					<div>
+						<label wicket:for="groom" class="col-3 p-0"><wicket:message key="406" /></label>
+						<select class="custom-select col-8" wicket:id="groom" ></select>
+					</div>
+					<div wicket:id="sip-container">
+						<label class="col-3 p-0"><wicket:message key="1003"/></label>
+						<span class="col-8" wicket:id="room.confno"></span>
+					</div>
+				</div>
+				<div id="tab3" class="tab-pane fade pt-1" role="tabpanel" aria-labelledby="tab3-tab">
+					<div>
+						<label wicket:for="reminder" class="col-3 p-0"><wicket:message key="565" /></label>
+						<select class="custom-select col-8" wicket:id="reminder"></select>
+					</div>
+					<div>
+						<input type="checkbox" wicket:id="passwordProtected" /><label wicket:for="passwordProtected"><wicket:message key="524" /></label>
+					</div>
+					<div>
+						<label wicket:for="password" class="col-3 p-0"><wicket:message key="110" /></label>
+						<input class="col-8" type="password" wicket:id="password" />
+					</div>
+					<div><wicket:message key="1445" /></div>
+					<div>
+						<label wicket:for="calendar" class="col-3 p-0"><wicket:message key="162" /></label>
+						<select class="custom-select col-8" wicket:id="calendar"></select>
+					</div>
 				</div>
 			</div>
 		</div>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
index 2645272..d0d4176 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
@@ -140,6 +140,7 @@ public class AppointmentDialog extends Modal<Appointment> {
 	protected void onInitialize() {
 		header(new ResourceModel("815"));
 		setBackdrop(Backdrop.STATIC);
+		size(Size.Large);
 
 		add(form = new AppointmentForm("appForm", getModel()));
 		addButton(save = new BootstrapAjaxButton("button", new ResourceModel("144"), form, Buttons.Type.Outline_Primary) {
@@ -206,6 +207,7 @@ public class AppointmentDialog extends Modal<Appointment> {
 				apptDao.update(a, getUserId());
 				target.add(feedback);
 				calendarPanel.refresh(target);
+				close(target);
 			}
 
 			@Override
@@ -249,10 +251,10 @@ public class AppointmentDialog extends Modal<Appointment> {
 			enterRoom.setVisible(false);
 		}
 		if (a.getRoom() != null) {
-			target.add(sipContainer.replace(new Label("room.confno", a.getRoom().getConfno())).setVisible(a.getRoom().isSipEnabled()));
+			sipContainer.replace(new Label("room.confno", a.getRoom().getConfno())).setVisible(a.getRoom().isSipEnabled());
 		}
 		save.setVisible(isOwner(a));
-		target.add(delete, enterRoom, save);
+		target.add(form, delete, enterRoom, save);
 		super.setModelObject(a);
 	}
 
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarFunctionsBehavior.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarFunctionsBehavior.java
deleted file mode 100644
index 684aebf..0000000
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarFunctionsBehavior.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
- * @author Sebastien Briquet
- */
-package org.apache.openmeetings.web.user.calendar;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.behavior.Behavior;
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.JavaScriptHeaderItem;
-import org.apache.wicket.markup.head.PriorityHeaderItem;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.request.resource.ResourceReference;
-import org.apache.wicket.resource.TextTemplateResourceReference;
-import org.apache.wicket.util.collections.MicroMap;
-
-import java.util.Map;
-
-public class CalendarFunctionsBehavior extends Behavior {
-	private static final long serialVersionUID = 1L;
-	private final String markupId;
-
-	public CalendarFunctionsBehavior(String markupId) {
-		this.markupId = markupId;
-	}
-
-	private IModel<Map<String, Object>> newResourceModel() {
-		return Model.ofMap(new MicroMap<String, Object>("markupId", this.markupId));
-	}
-
-	private ResourceReference newResourceReference() {
-		return new TextTemplateResourceReference(CalendarFunctionsBehavior.class, "calendar-functions.js", this.newResourceModel());
-	}
-
-	@Override
-	public void renderHead(Component component, IHeaderResponse response) {
-		super.renderHead(component, response);
-		response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(this.newResourceReference(), "calendar-functions")));
-	}
-}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.html
index 3ea06f2..76c76f1 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.html
@@ -23,8 +23,8 @@
 <wicket:panel>
 	<div id="calendarlistcontainer">
 		<div class="cell">
-			<button wicket:id="submitCalendar"><span><wicket:message key="calendar.addCalendar"/></span></button>
-			<button wicket:id="syncCalendarButton"><span>Sync</span></button>
+			<button wicket:id="submitCalendar"></button>
+			<button wicket:id="syncCalendarButton">Sync</button>
 		</div>
 		<ul class="calendarlist striped-table" wicket:id="calendarListContainer">
 			<li wicket:id="items" class="ui-widget-content striped-row clickable">
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 d11e79d..3137711 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
@@ -29,7 +29,6 @@ import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
-import java.util.Optional;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.http.client.HttpClient;
@@ -49,6 +48,7 @@ import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
@@ -56,6 +56,9 @@ import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.LoadableDetachableModel;
+import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -65,11 +68,14 @@ 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.form.button.Button;
+
+import de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxLink;
+import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 
 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 final AbstractAjaxTimerBehavior refreshTimer = new AbstractAjaxTimerBehavior(Duration.ofSeconds(10)) {
 		private static final long serialVersionUID = 1L;
 
@@ -123,12 +129,14 @@ public class CalendarPanel extends UserBasePanel {
 		Options options = new Options();
 		options.set("isRTL", isRtl);
 		options.set("height", Options.asString("parent"));
-		options.set("header", isRtl ? "{left: 'agendaDay,agendaWeek,month', center: 'title', right: 'today nextYear,next,prev,prevYear'}"
-				: "{left: 'prevYear,prev,next,nextYear today', center: 'title', right: 'month,agendaWeek,agendaDay'}");
+		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"))
@@ -142,12 +150,6 @@ public class CalendarPanel extends UserBasePanel {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void onInitialize() {
-				super.onInitialize();
-				add(new CalendarFunctionsBehavior(getMarkupId()));
-			}
-
-			@Override
 			public boolean isSelectable() {
 				return true;
 			}
@@ -291,24 +293,24 @@ public class CalendarPanel extends UserBasePanel {
 			}
 		});
 
-		add(new Button("syncCalendarButton").add(new AjaxEventBehavior(EVT_CLICK) {
+		add(new BootstrapAjaxLink<String>("syncCalendarButton", null, Buttons.Type.Outline_Primary, new ResourceModel("calendar.sync")) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void onEvent(AjaxRequestTarget target) {
+			public void onClick(AjaxRequestTarget target) {
 				syncCalendar(target);
 			}
-		}));
+		}.setSize(Buttons.Size.Small));
 
-		add(new Button("submitCalendar").add(new AjaxEventBehavior(EVT_CLICK) {
+		add(new BootstrapAjaxLink<String>("submitCalendar", null, Buttons.Type.Outline_Primary, new ResourceModel("calendar.addCalendar")) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void onEvent(AjaxRequestTarget target) {
+			public void onClick(AjaxRequestTarget target) {
 				calendarDialog.show(target, CalendarDialog.DIALOG_TYPE.UPDATE_CALENDAR, getDefaultCalendar());
 				target.add(calendarDialog);
 			}
-		}));
+		}.setSize(Buttons.Size.Small));
 
 		add(calendarListContainer);
 
@@ -341,9 +343,7 @@ public class CalendarPanel extends UserBasePanel {
 	@Override
 	public void renderHead(IHeaderResponse response) {
 		super.renderHead(response);
-
-		Optional<AjaxRequestTarget> target = getRequestCycle().find(AjaxRequestTarget.class);
-		target.ifPresent(t -> t.appendJavaScript("addCalButton('datepicker');"));
+		response.render(JavaScriptHeaderItem.forReference(CALJS));
 	}
 
 	// 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/calendar-functions.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/calendar-functions.js
index be79abe..0354425 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,47 +1,35 @@
 /* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
-/**
- * @author Sebastien Briquet
- */
-function toggleDatePicker(id) {
-	const dp = $("#" + id);
-	dp.datepicker(dp.datepicker("widget").is(":visible") ? "hide" : "show");
-	return false;
-}
-function addCalButton(id) {
-	const my_button =
-		'<button class="fc-button fc-state-default fc-corner-right fc-corner-left" onclick="return toggleDatePicker(\'' + id + '\');">' +
-		'<input type="text" id="' + id + '" /></button>';
-
-	if (Settings.isRtl) {
-		$(".fc .fc-toolbar .fc-right").prepend(my_button);
-	} else {
-		$(".fc .fc-toolbar .fc-left").append(my_button);
+function onOmGotoClick() {
+	const gotoBtn = $('#calendar .fc-gotoBtn-button');
+	let selected = null
+		, gotoSpan = gotoBtn.parent().find('.goto-span');
+	if (gotoSpan.length < 1) {
+		gotoBtn.parent().append($('<span class="goto-span"><span/></span>'));
 	}
-
-	const dp = $("#" + id);
-	dp.datepicker({
-		showOn: "button",
-		buttonImage: "images/calendar.gif",
-		buttonImageOnly: true,
-		changeMonth: true,
-		changeYear: true,
-		changeDay: true,
-		dayNames: $('#${markupId}').fullCalendar("option","dayNames"),
-		dayNamesShort: $('#${markupId}').fullCalendar("option","dayNamesShort"),
-		dayNamesMin: $('#${markupId}').fullCalendar("option","dayNamesShort"),
-		monthNames: $('#${markupId}').fullCalendar("option","monthNames"),
-		monthNamesShort: $('#${markupId}').fullCalendar("option","monthNamesShort"),
-		isRTL: Settings.isRtl,
-		onChangeMonthYear: function(year, month, inst) {
-			$('#${markupId}').fullCalendar('gotoDate', year + '-' + ('0' + month).slice(-2) + '-' + inst.selectedDay);
-		},
-		onSelect: function(dateText) {
-			var date = new Date(dateText);
-			$('#${markupId}').fullCalendar('gotoDate', date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + date.getDate());
+	gotoSpan = gotoBtn.parent().find('.goto-span');
+	gotoSpan.datetimepicker({
+		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
 		}
 	});
-	dp.hide();
-}
-function setDatepickerDate(id, date) {
-	$("#"+id).datepicker('setDate', date);
+	gotoSpan
+		.off()
+		.on('hide.datetimepicker', function(e){
+			$('#calendar').fullCalendar('gotoDate', e.date.format('YYYY-MM-DD'));
+		})
+		.datetimepicker('show');
 }
diff --git a/openmeetings-web/src/main/webapp/css/raw-calendar.css b/openmeetings-web/src/main/webapp/css/raw-calendar.css
index 2466cdd..0f3d5c2 100644
--- a/openmeetings-web/src/main/webapp/css/raw-calendar.css
+++ b/openmeetings-web/src/main/webapp/css/raw-calendar.css
@@ -1,27 +1,9 @@
 /* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
-.appointmentPopUp textarea {
-	width: 424px;
-	height: 80px;
-}
-.appointmentPopUp select {
-	width: 426px;
-}
-.appointmentPopUp td {
-	vertical-align: middle;
-}
-.appointmentPopUp .attendeeContainer {
-	background-color: #FFFFFF;
-	border: solid 1px #aacfe4;
-	width: 424px;
-	height: 100px;
-	overflow-x: scroll;
-	float: left;
-}
-.appointment.ui-dialog .ui-dialog-content {
-	padding: 0;
-}
-.cell input{
-	width: 47.5%;
+#contents #calendar .fc-gotoBtn-button::before {
+	font-family: 'Font Awesome 5 Free';
+	font-weight: 900;
+	content: "\f133";
+	font-size: 1em;
 }
 .calendarlist li {
 	list-style-type: none;
diff --git a/openmeetings-web/src/main/webapp/css/raw-general.css b/openmeetings-web/src/main/webapp/css/raw-general.css
index dc0d250..2e3e0b2 100644
--- a/openmeetings-web/src/main/webapp/css/raw-general.css
+++ b/openmeetings-web/src/main/webapp/css/raw-general.css
@@ -413,6 +413,7 @@ select.messages.selector {
 .om-select2 .select2.select2-container {
 	max-height: 80px;
 	overflow-y: auto;
+	width: 100% !important;
 }
 .om-select2.full-width .select2.select2-container {
 	width: 100% !important;