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 b2cbe39  [OPENMEETINGS-2165] some additional dialogs are moved to 
bootstrap
     new 75091e6  Merge branch 'csp' of github.com:apache/openmeetings into csp
b2cbe39 is described below

commit b2cbe39bf3622a168c8115cf27ffc4568eb63f70
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Thu Feb 6 13:27:38 2020 +0700

    [OPENMEETINGS-2165] some additional dialogs are moved to bootstrap
---
 .../openmeetings/web/admin/backup/BackupPanel.java |   6 +-
 .../web/admin/labels/AddLanguageDialog.java        |   6 +-
 .../openmeetings/web/admin/labels/LangPanel.java   |   6 +-
 .../web/admin/users/PasswordDialog.java            |   6 +-
 .../apache/openmeetings/web/common/Captcha.java    |   8 -
 .../openmeetings/web/common/FormActionsPanel.java  |   5 +-
 .../openmeetings/web/common/GeneralUserForm.java   |  13 +-
 .../openmeetings/web/common/InvitationForm.java    |   6 +-
 .../apache/openmeetings/web/common/MainPanel.java  |  11 +-
 .../apache/openmeetings/web/common/NameDialog.java |   6 +-
 .../openmeetings/web/common/OmDateTimePicker.java  |  29 +--
 .../apache/openmeetings/web/pages/BasePage.java    |   6 +-
 .../web/pages/InvitationPasswordDialog.java        |   6 +-
 .../web/pages/install/InstallWizard.java           |   5 +-
 .../openmeetings/web/room/NicknameDialog.java      |   6 +-
 .../openmeetings/web/room/menu/RoomMenuPanel.java  |   3 -
 .../web/room/menu/SipDialerDialog.java             |   6 +-
 .../web/room/poll/CreatePollDialog.java            |   6 +-
 .../openmeetings/web/room/poll/VoteDialog.java     |  21 +-
 .../web/room/sidebar/UploadDialog.java             |   6 +-
 .../apache/openmeetings/web/user/AboutDialog.html  |  38 ++--
 .../apache/openmeetings/web/user/AboutDialog.java  |  35 +--
 .../openmeetings/web/user/MessageDialog.html       |   4 +-
 .../openmeetings/web/user/MessageDialog.java       | 246 ++++++++++-----------
 .../openmeetings/web/user/UserInfoDialog.html      |   4 +-
 .../openmeetings/web/user/UserInfoDialog.java      |  79 +++----
 .../web/user/calendar/AppointmentDialog.java       |  11 +-
 .../web/user/calendar/CalendarDialog.java          |   6 +-
 .../openmeetings/web/user/chat/ChatToolbar.html    |  22 +-
 .../apache/openmeetings/web/user/chat/raw-chat.js  |   3 +-
 .../dashboard/admin/AdminCleanupInfoDialog.java    |   6 +-
 .../web/user/profile/ChangePasswordDialog.java     |   6 +-
 .../web/user/profile/MessagesContactsPanel.java    |  35 +--
 openmeetings-web/src/main/webapp/css/raw-chat.css  |  16 --
 .../src/main/webapp/css/raw-general-rtl.css        |   6 -
 35 files changed, 304 insertions(+), 380 deletions(-)

diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
index 1920cff..bf0951c 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
@@ -52,10 +52,10 @@ import org.apache.wicket.util.lang.Bytes;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
 import com.googlecode.wicket.jquery.ui.widget.progressbar.ProgressBar;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 /**
  * Panel component to manage Backup Import/Export
  *
@@ -66,7 +66,7 @@ public class BackupPanel extends AdminBasePanel {
        private static final Logger log = 
LoggerFactory.getLogger(BackupPanel.class);
        private static final long serialVersionUID = 1L;
 
-       private final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        @SpringBean
        private BackupExport backupExport;
        @SpringBean
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/AddLanguageDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/AddLanguageDialog.java
index 7afd892..87a2466 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/AddLanguageDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/AddLanguageDialog.java
@@ -34,14 +34,14 @@ import org.apache.wicket.validation.IValidatable;
 import org.apache.wicket.validation.IValidator;
 import org.apache.wicket.validation.ValidationError;
 
-import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
 public class AddLanguageDialog extends AbstractFormDialog<String> {
        private static final long serialVersionUID = 1L;
-       private final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        private DialogButton add;
        private final Form<Void> form = new Form<>("addLangForm");
        private final RequiredTextField<String> iso = new 
RequiredTextField<>("iso", Model.of(""));
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.java
index 3e1f0db..1ed3931 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.java
@@ -62,9 +62,9 @@ import 
org.apache.wicket.util.resource.ResourceStreamNotFoundException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
 /**
  * Language Editor, add/insert/update Label and add/delete language contains 
several Forms and one list
@@ -75,7 +75,7 @@ import 
com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
 public class LangPanel extends AdminBasePanel {
        private static final long serialVersionUID = 1L;
        private static final Logger log = 
LoggerFactory.getLogger(LangPanel.class);
-       private final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        private LangForm langForm;
        private final FileUploadField fileUploadField = new 
FileUploadField("fileInput");
 
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/PasswordDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/PasswordDialog.java
index 3c36082..a044c13 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/PasswordDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/PasswordDialog.java
@@ -33,16 +33,16 @@ import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.danekja.java.util.function.serializable.SerializableConsumer;
 
-import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
 public class PasswordDialog extends AbstractFormDialog<String> {
        private static final long serialVersionUID = 1L;
        private DialogButton btnOk;
        private DialogButton btnCancel;
-       protected final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        private final Form<String> form = new Form<>("form");
        private final PasswordTextField pass = new 
PasswordTextField("password", Model.of(""));
        private SerializableConsumer<AjaxRequestTarget> action = null;
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/Captcha.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/Captcha.java
index 7e6b3b5..48297c1 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/Captcha.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/Captcha.java
@@ -25,8 +25,6 @@ import java.security.SecureRandom;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.extensions.markup.html.captcha.CaptchaImageResource;
-import org.apache.wicket.markup.head.CssHeaderItem;
-import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.html.form.RequiredTextField;
 import org.apache.wicket.markup.html.image.Image;
 import org.apache.wicket.markup.html.panel.Panel;
@@ -39,7 +37,6 @@ import org.apache.wicket.validation.ValidationError;
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxLink;
 import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 import de.agilecoders.wicket.core.markup.html.bootstrap.image.Icon;
-import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesome5CssReference;
 import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesome5IconType;
 
 public class Captcha extends Panel {
@@ -95,11 +92,6 @@ public class Captcha extends Panel {
                        private static final long serialVersionUID = 1L;
 
                        @Override
-                       public void renderHead(IHeaderResponse response) {
-                               
response.render(CssHeaderItem.forReference(FontAwesome5CssReference.instance()));
-                       }
-
-                       @Override
                        public void onClick(AjaxRequestTarget target) {
                                captchaImageResource.invalidate();
                                target.add(captcha);
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/FormActionsPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/FormActionsPanel.java
index e6c9aa2..2209faa 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/FormActionsPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/FormActionsPanel.java
@@ -23,13 +23,12 @@ import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.panel.Panel;
 
-import com.googlecode.wicket.jquery.core.Options;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
 public abstract class FormActionsPanel<T> extends Panel {
        private static final long serialVersionUID = 1L;
        private final Form<T> form;
-       protected final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       protected final NotificationPanel feedback = new 
NotificationPanel("feedback");
        private AjaxButton saveBtn;
        private ConfirmableAjaxBorder purgeBtn;
 
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GeneralUserForm.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GeneralUserForm.java
index 3b4e1ed..77c7322 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GeneralUserForm.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GeneralUserForm.java
@@ -36,12 +36,10 @@ import org.apache.openmeetings.db.entity.user.GroupUser;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.entity.user.User.Salutation;
 import org.apache.openmeetings.util.CalendarHelper;
-import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.util.CountryDropDown;
 import org.apache.openmeetings.web.util.RestrictiveChoiceProvider;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import 
org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
-import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.html.form.ChoiceRenderer;
 import org.apache.wicket.markup.html.form.DropDownChoice;
 import org.apache.wicket.markup.html.form.Form;
@@ -58,9 +56,6 @@ import org.apache.wicket.util.string.Strings;
 import org.wicketstuff.select2.Response;
 import org.wicketstuff.select2.Select2MultiChoice;
 
-import com.googlecode.wicket.kendo.ui.KendoCultureHeaderItem;
-import com.googlecode.wicket.kendo.ui.form.datetime.local.AjaxDatePicker;
-
 public class GeneralUserForm extends Form<User> {
        private static final long serialVersionUID = 1L;
        private final RequiredTextField<String> email = new 
RequiredTextField<>("address.email");
@@ -105,7 +100,7 @@ public class GeneralUserForm extends Form<User> {
                add(new DropDownChoice<>("timeZoneId", AVAILABLE_TIMEZONES));
                add(new LanguageDropDown("languageId"));
                add(new TextField<String>("address.phone"));
-               add(new AjaxDatePicker("age", new 
PropertyModel<LocalDate>(this, "age"), WebSession.get().getLocale()) {
+               add(new AjaxOmDatePicker("age", new 
PropertyModel<LocalDate>(this, "age")) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
@@ -186,10 +181,4 @@ public class GeneralUserForm extends Form<User> {
        protected IMarkupSourcingStrategy newMarkupSourcingStrategy() {
                return new PanelMarkupSourcingStrategy(false);
        }
-
-       @Override
-       public void renderHead(IHeaderResponse response) {
-               super.renderHead(response);
-               
response.render(KendoCultureHeaderItem.of(WebSession.get().getLocale()));
-       }
 }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/InvitationForm.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/InvitationForm.java
index fa2a480..60b5391 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/InvitationForm.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/InvitationForm.java
@@ -61,14 +61,14 @@ import org.apache.wicket.util.string.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
 public abstract class InvitationForm extends Form<Invitation> {
        private static final long serialVersionUID = 1L;
        private static final Logger log = 
LoggerFactory.getLogger(InvitationForm.class);
-       private final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        private final PasswordTextField passwd = new 
PasswordTextField("password");
        private final DropDownChoice<String> timeZoneId = new 
DropDownChoice<>("timeZoneId", Model.of((String)null), AVAILABLE_TIMEZONES);
        private final OmDateTimePicker from = new OmDateTimePicker("from", 
Model.of(LocalDateTime.now()));
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
index df72525..840eb9a 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
@@ -89,7 +89,6 @@ import org.slf4j.LoggerFactory;
 import org.wicketstuff.urlfragment.UrlFragment;
 
 import com.github.openjson.JSONObject;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
 
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.navbar.INavbarComponent;
 
@@ -216,7 +215,7 @@ public class MainPanel extends Panel {
 
                        @Override
                        public void onClick(AjaxRequestTarget target) {
-                               about.open(target);
+                               about.show(target);
                        }
                });
                if 
(getApplication().getDebugSettings().isDevelopmentUtilitiesEnabled()) {
@@ -230,9 +229,9 @@ public class MainPanel extends Panel {
                        private static final long serialVersionUID = 1L;
 
                        @Override
-                       public void onClose(IPartialPageRequestHandler handler, 
DialogButton button) {
+                       public void onSend(IPartialPageRequestHandler handler) {
                                BasePanel bp = getCurrentPanel();
-                               if (send.equals(button) && bp != null) {
+                               if (bp != null) {
                                        bp.onNewMessageClose(handler);
                                }
                        }
@@ -243,7 +242,7 @@ public class MainPanel extends Panel {
 
                        @Override
                        protected void respond(AjaxRequestTarget target) {
-                               userInfo.open(target, getParam(getComponent(), 
PARAM_USER_ID).toLong());
+                               userInfo.show(target, getParam(getComponent(), 
PARAM_USER_ID).toLong());
                        }
 
                        @Override
@@ -271,7 +270,7 @@ public class MainPanel extends Panel {
 
                        @Override
                        protected void respond(AjaxRequestTarget target) {
-                               newMessage.reset(true).open(target, 
getParam(getComponent(), PARAM_USER_ID).toOptionalLong());
+                               newMessage.reset(true).show(target, 
getParam(getComponent(), PARAM_USER_ID).toOptionalLong());
                        }
 
                        @Override
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/NameDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/NameDialog.java
index c85e29a..aa11fce 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/NameDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/NameDialog.java
@@ -29,17 +29,17 @@ import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.RequiredTextField;
 import org.apache.wicket.model.Model;
 
-import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
 public abstract class NameDialog extends AbstractFormDialog<String> {
        private static final long serialVersionUID = 1L;
        private DialogButton add;
        private DialogButton cancel;
        private final Form<String> form;
-       protected final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       protected final NotificationPanel feedback = new 
NotificationPanel("feedback");
        private final String name;
        private RequiredTextField<String> title;
 
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 b7a90e0..0787b42 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
@@ -18,38 +18,21 @@
  */
 package org.apache.openmeetings.web.common;
 
-import java.time.LocalDate;
 import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.util.Locale;
 
-import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.Component;
+import 
org.apache.wicket.extensions.markup.html.form.datetime.LocalDateTimeTextField;
 import org.apache.wicket.model.IModel;
 
-import com.googlecode.wicket.jquery.core.Options;
-import com.googlecode.wicket.kendo.ui.form.datetime.local.DatePicker;
-import com.googlecode.wicket.kendo.ui.form.datetime.local.DateTimePicker;
-import com.googlecode.wicket.kendo.ui.form.datetime.local.TimePicker;
-
-public class OmDateTimePicker extends DateTimePicker {
+public class OmDateTimePicker extends AbstractOmDateTimePicker<LocalDateTime> {
        private static final long serialVersionUID = 1L;
 
        public OmDateTimePicker(String id, IModel<LocalDateTime> model) {
-               super(id, model, WebSession.get().getLocale());
-       }
-
-       @Override
-       protected DatePicker newDatePicker(String id, IModel<LocalDate> model, 
Locale locale, String datePattern, Options options) {
-               DatePicker dp = super.newDatePicker(id, model, locale, 
datePattern, options);
-               dp.setLabel(getLabel());
-               return dp;
+               super(id, model, getDateTimeFormat());
        }
 
        @Override
-       protected TimePicker newTimePicker(String id, IModel<LocalTime> model, 
Locale locale, String timePattern, Options options) {
-               TimePicker tp = super.newTimePicker(id, model, locale, 
timePattern, options);
-               tp.setLabel(getLabel());
-               return tp;
+       protected Component newInput(String wicketId, String dateFormat) {
+               return new LocalDateTimeTextField(wicketId, getModel(), 
dateFormat);
        }
-       //TODO render KendoCultureHeaderItem as soon as localized AM/PM will be 
correctly handled
 }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.java
index ed8384f..6c2656a 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.java
@@ -22,7 +22,6 @@ import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getApplicationN
 import static org.apache.openmeetings.util.OpenmeetingsVariables.getGaCode;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.isInitComplete;
 import static org.apache.openmeetings.web.app.Application.isInstalled;
-import static org.apache.wicket.RuntimeConfigurationType.DEVELOPMENT;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -51,6 +50,8 @@ import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.string.Strings;
 import org.wicketstuff.urlfragment.AsyncUrlFragmentAwarePage;
 
+import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesome5CssReference;
+
 public abstract class BasePage extends AsyncUrlFragmentAwarePage {
        private static final long serialVersionUID = 1L;
        public static final String ALIGN_LEFT = "align-left ";
@@ -124,8 +125,6 @@ public abstract class BasePage extends 
AsyncUrlFragmentAwarePage {
        protected void internalRenderHead(IHeaderResponse response) {
                response.render(new 
PriorityHeaderItem(JavaScriptHeaderItem.forReference(Application.get().getJavaScriptLibrarySettings().getJQueryReference())));
                super.renderHead(response);
-               final String suffix = DEVELOPMENT == 
getApplication().getConfigurationType() ? "" : ".min";
-               
response.render(CssHeaderItem.forUrl(String.format("css/theme_om/jquery-ui%s.css",
 suffix)));
                response.render(CssHeaderItem.forUrl("css/theme.css"));
                if (!Strings.isEmpty(getGaCode())) {
                        response.render(new 
PriorityHeaderItem(JavaScriptHeaderItem.forReference(new 
JavaScriptResourceReference(BasePage.class, "om-ga.js"))));
@@ -133,6 +132,7 @@ public abstract class BasePage extends 
AsyncUrlFragmentAwarePage {
                        
script.append(getGaCode()).append("');").append(isMainPage() ? "initHash()" : 
"init()").append(';');
                        response.render(OnDomReadyHeaderItem.forScript(script));
                }
+               
response.render(CssHeaderItem.forReference(FontAwesome5CssReference.instance()));
                response.render(new 
FilteredHeaderItem(CssHeaderItem.forUrl("css/custom.css"), CUSTOM_CSS_FILTER));
        }
 
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/InvitationPasswordDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/InvitationPasswordDialog.java
index e3ccc19..b0112fd 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/InvitationPasswordDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/InvitationPasswordDialog.java
@@ -38,13 +38,13 @@ import org.apache.wicket.validation.IValidator;
 import org.apache.wicket.validation.ValidationError;
 
 import com.googlecode.wicket.jquery.core.JQueryBehavior;
-import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
 public class InvitationPasswordDialog extends NonClosableDialog<Invitation> {
        private static final long serialVersionUID = 1L;
-       private final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        private DialogButton check;
        private final Form<Void> form = new Form<>("form");
        private final PasswordTextField password = new 
PasswordTextField("password", Model.of((String)null));
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
index ad544eb..c0e512d 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
@@ -92,7 +92,8 @@ import 
com.googlecode.wicket.jquery.ui.widget.progressbar.ProgressBar;
 import com.googlecode.wicket.jquery.ui.widget.tooltip.TooltipBehavior;
 import com.googlecode.wicket.jquery.ui.widget.wizard.AbstractWizard;
 import com.googlecode.wicket.kendo.ui.form.button.IndicatingAjaxButton;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
 public class InstallWizard extends AbstractWizard<InstallationConfig> {
        private static final long serialVersionUID = 1L;
@@ -146,7 +147,7 @@ public class InstallWizard extends 
AbstractWizard<InstallationConfig> {
 
        @Override
        protected WebMarkupContainer newFeedbackPanel(String id) {
-               KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+               NotificationPanel feedback = new NotificationPanel("feedback");
                feedback.setEscapeModelStrings(false);
                return feedback;
        }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/NicknameDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/NicknameDialog.java
index 8029183..9c2e1ba 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/NicknameDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/NicknameDialog.java
@@ -41,14 +41,14 @@ import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.apache.wicket.util.string.Strings;
 
 import com.googlecode.wicket.jquery.core.JQueryBehavior;
-import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
 public class NicknameDialog extends NonClosableDialog<User> {
        private static final long serialVersionUID = 1L;
        private static final FastDateFormat TIME_DF = 
FastDateFormat.getInstance("HH:mm:ss");
-       private final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        private DialogButton ok;
        private final RoomPanel room;
        private final Form<User> form;
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
index 1a3e1e6..e6408a9 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
@@ -54,7 +54,6 @@ import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
-import org.apache.wicket.markup.head.CssHeaderItem;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.panel.Panel;
@@ -67,7 +66,6 @@ import com.github.openjson.JSONObject;
 import com.googlecode.wicket.jquery.ui.form.button.Button;
 
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.navbar.INavbarComponent;
-import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesome5CssReference;
 import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesome5IconType;
 
 public class RoomMenuPanel extends Panel {
@@ -179,7 +177,6 @@ public class RoomMenuPanel extends Panel {
        @Override
        public void renderHead(IHeaderResponse response) {
                super.renderHead(response);
-               
response.render(CssHeaderItem.forReference(FontAwesome5CssReference.instance()));
                pollsSubMenu.renderHead(response);
        }
 
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.java
index e7675ab..ae8f65d 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/SipDialerDialog.java
@@ -31,14 +31,14 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
-import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
 public class SipDialerDialog extends AbstractFormDialog<String> {
        private static final long serialVersionUID = 1L;
-       private final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        private DialogButton call;
        private DialogButton close;
        private final Form<String> form = new Form<>("form", Model.of(""));
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.java
index fa4ac95..8af14d7 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.java
@@ -42,10 +42,10 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
-import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
 public class CreatePollDialog extends AbstractFormDialog<RoomPoll> {
        private static final long serialVersionUID = 1L;
@@ -53,7 +53,7 @@ public class CreatePollDialog extends 
AbstractFormDialog<RoomPoll> {
        private DialogButton cancel;
        private final Long roomId;
        private final PollForm form;
-       private final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        @SpringBean
        private RoomDao roomDao;
        @SpringBean
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.java
index 8d3ab3a..34711aa 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.java
@@ -18,10 +18,13 @@
  */
 package org.apache.openmeetings.web.room.poll;
 
-import com.googlecode.wicket.jquery.core.Options;
-import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+import static org.apache.openmeetings.core.util.WebSocketHelper.sendRoom;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
 import org.apache.openmeetings.db.dao.room.PollDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.room.RoomPoll;
@@ -43,12 +46,10 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
 
-import static org.apache.openmeetings.core.util.WebSocketHelper.sendRoom;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
 /**
  * @author solomax
@@ -60,7 +61,7 @@ public class VoteDialog extends 
AbstractFormDialog<RoomPollAnswer> {
        private PollAnswerForm form;
        private DialogButton vote;
        private DialogButton cancel;
-       private final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        private final IModel<String> user = Model.of((String)null);
        @SpringBean
        private UserDao userDao;
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
index a6750fd..eecc5b4 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
@@ -64,16 +64,16 @@ import org.apache.wicket.util.string.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
 import com.googlecode.wicket.jquery.ui.widget.progressbar.ProgressBar;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
 public class UploadDialog extends AbstractFormDialog<String> {
        private static final long serialVersionUID = 1L;
        private static final Logger log = 
LoggerFactory.getLogger(UploadDialog.class);
-       private final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        private final Form<String> form = new Form<>("form") {
                private static final long serialVersionUID = 1L;
 
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.html
index 256c641..93eb6ec 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.html
@@ -20,24 +20,22 @@
 -->
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org";>
-<wicket:panel>
-       <table>
-               <tr>
-                       <td><wicket:message key="165" /></td>
-                       <td wicket:id="name">[name]</td>
-               </tr>
-               <tr>
-                       <td><wicket:message key="1551" /></td>
-                       <td wicket:id="version">[version]</td>
-               </tr>
-               <tr>
-                       <td><wicket:message key="1552" /></td>
-                       <td wicket:id="revision">[revision]</td>
-               </tr>
-               <tr>
-                       <td><wicket:message key="1553" /></td>
-                       <td wicket:id="buildDate">[buildDate]</td>
-               </tr>
-       </table>
-</wicket:panel>
+<wicket:extend>
+       <div class="row no-gutters">
+               <div class="col-6"><wicket:message key="165"/></div>
+               <div class="col-6" wicket:id="name"></div>
+       </div>
+       <div class="row no-gutters">
+               <div class="col-6"><wicket:message key="1551"/></div>
+               <div class="col-6" wicket:id="version"></div>
+       </div>
+       <div class="row no-gutters">
+               <div class="col-6"><wicket:message key="1552"/></div>
+               <div class="col-6" wicket:id="revision"></div>
+       </div>
+       <div class="row no-gutters">
+               <div class="col-6"><wicket:message key="1553"/></div>
+               <div class="col-6" wicket:id="buildDate"></div>
+       </div>
+</wicket:extend>
 </html>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.java
index d45e55d..d4642a6 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.java
@@ -23,40 +23,27 @@ import static 
org.apache.openmeetings.util.Version.getBuildDate;
 import static org.apache.openmeetings.util.Version.getRevision;
 import static org.apache.openmeetings.util.Version.getVersion;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.model.ResourceModel;
 
-import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 
-public class AboutDialog extends AbstractDialog<String> {
+public class AboutDialog extends Modal<String> {
        private static final long serialVersionUID = 1L;
 
        public AboutDialog(String id) {
-               super(id, "");
-
-               add(new Label("name", getApplicationName()));
-               add(new Label("version", getVersion()));
-               add(new Label("revision", getRevision()));
-               add(new Label("buildDate", getBuildDate()));
+               super(id);
        }
 
        @Override
        protected void onInitialize() {
-               getTitle().setObject(getString("1549"));
+               header(new ResourceModel("1549"));
+               setCloseOnEscapeKey(true);
+               setBackdrop(Backdrop.STATIC);
                super.onInitialize();
-       }
-
-       @Override
-       protected List<DialogButton> getButtons() {
-               return new ArrayList<>();
-       }
-
-       @Override
-       public void onClose(IPartialPageRequestHandler handler, DialogButton 
arg1) {
-               //no-op
+               add(new Label("name", getApplicationName()));
+               add(new Label("version", getVersion()));
+               add(new Label("revision", getRevision()));
+               add(new Label("buildDate", getBuildDate()));
        }
 }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.html
index 6ccd8e5..1a530e4 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.html
@@ -20,7 +20,7 @@
 -->
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org";>
-<wicket:panel>
+<wicket:extend>
        <form wicket:id="form">
                <table class="w-100 private-message">
                        <tr>
@@ -70,5 +70,5 @@
                        </tr>
                </table>
        </form>
-</wicket:panel>
+</wicket:extend>
 </html>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
index a760f32..f719017 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
@@ -31,7 +31,6 @@ import java.time.LocalDateTime;
 import java.time.ZonedDateTime;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Date;
 import java.util.List;
@@ -69,27 +68,27 @@ import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.model.util.CollectionModel;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
-import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.WysiwygEditor;
 import 
com.googlecode.wicket.jquery.ui.plugins.wysiwyg.toolbar.DefaultWysiwygToolbar;
-import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.kendo.ui.form.datetime.local.DateTimePicker;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
 
-public class MessageDialog extends AbstractFormDialog<PrivateMessage> {
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxButton;
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxLink;
+import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
+
+public class MessageDialog extends Modal<PrivateMessage> {
        private static final long serialVersionUID = 1L;
        private final Form<PrivateMessage> form;
-       private final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
-       protected DialogButton send;
-       private DialogButton cancel;
+       private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        private final WebMarkupContainer roomParamsBlock = new 
WebMarkupContainer("roomParamsBlock");
        private final WebMarkupContainer roomParams = new 
WebMarkupContainer("roomParams");
-       private final DateTimePicker start = new OmDateTimePicker("start", 
Model.of(LocalDateTime.now()));
-       private final DateTimePicker end = new OmDateTimePicker("end", 
Model.of(LocalDateTime.now()));
+       private final OmDateTimePicker start = new OmDateTimePicker("start", 
Model.of(LocalDateTime.now()));
+       private final OmDateTimePicker end = new OmDateTimePicker("end", 
Model.of(LocalDateTime.now()));
        private boolean isPrivate = false;
        private final IModel<Collection<User>> modelTo = new 
CollectionModel<>(new ArrayList<User>());
        @SpringBean
@@ -108,15 +107,116 @@ public class MessageDialog extends 
AbstractFormDialog<PrivateMessage> {
        private MailHandler handler;
 
        public MessageDialog(String id, CompoundPropertyModel<PrivateMessage> 
model) {
-               super(id, "", model);
+               super(id, model);
                form = new Form<>("form", getModel());
        }
 
        @Override
        protected void onInitialize() {
-               getTitle().setObject(getString("1209"));
-               send = new DialogButton("send", getString("218"));
-               cancel = new DialogButton("cancel", getString("lbl.cancel"));
+               header(new ResourceModel("1209"));
+               setCloseOnEscapeKey(true);
+               setUseCloseHandler(true);
+               setBackdrop(Backdrop.STATIC);
+               size(Modal.Size.Large);
+
+               addButton(new BootstrapAjaxButton("button", new 
ResourceModel("218"), form, Buttons.Type.Primary) {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       protected void onError(AjaxRequestTarget target) {
+                               target.add(feedback);
+                       }
+
+                       @Override
+                       protected void onSubmit(AjaxRequestTarget target) {
+                               PrivateMessage m = 
MessageDialog.this.getModelObject();
+                               m.setInserted(new Date());
+                               User owner = userDao.get(getUserId());
+                               if (m.isBookedRoom()) {
+                                       Room r = m.getRoom();
+                                       r.setName(m.getSubject());
+                                       r.setComment("");
+                                       r.setCapacity(100L);
+                                       r.setAppointment(true);
+                                       r.setAllowUserQuestions(true);
+                                       r = roomDao.update(r, getUserId());
+                                       Appointment a = new Appointment();
+                                       a.setTitle(m.getSubject());
+                                       a.setDescription(m.getMessage());
+                                       a.setRoom(r);
+                                       
a.setStart(CalendarWebHelper.getDate(start.getModelObject()));
+                                       
a.setEnd(CalendarWebHelper.getDate(end.getModelObject()));
+                                       List<MeetingMember> attendees = new 
ArrayList<>();
+                                       for (User to : modelTo.getObject()) {
+                                               MeetingMember mm = new 
MeetingMember();
+                                               mm.setUser(to);
+                                               mm.setDeleted(false);
+                                               mm.setInserted(a.getInserted());
+                                               mm.setUpdated(a.getUpdated());
+                                               mm.setAppointment(a);
+                                               attendees.add(mm);
+                                       }
+                                       a.setOwner(owner);
+                                       a.setMeetingMembers(attendees);
+                                       apptDao.update(a, getUserId(), false);
+                                       m.setRoom(r);
+                               } else {
+                                       m.setRoom(null);
+                               }
+                               for (User to : modelTo.getObject()) {
+                                       if (to.getId() == null) {
+                                               userDao.update(to, getUserId());
+                                       }
+                                       //to send
+                                       PrivateMessage p = new 
PrivateMessage(m);
+                                       p.setTo(to);
+                                       p.setFolderId(SENT_FOLDER_ID);
+                                       msgDao.update(p, getUserId());
+                                       //to inbox
+                                       p = new PrivateMessage(m);
+                                       p.setOwner(to);
+                                       p.setFolderId(INBOX_FOLDER_ID);
+                                       msgDao.update(p, getUserId());
+                                       if (to.getAddress() != null) {
+                                               String aLinkHTML =      
(isPrivate && to.getType() == Type.user) ? "<br/><br/>" + "<a href='" + 
getContactsLink() + "'>"
+                                                                       + 
Application.getString("1302", to.getLanguageId()) + "</a><br/>" : "";
+                                               String invitationLink = "";
+                                               if (p.isBookedRoom()) {
+                                                       Invitation i = 
inviteManager.getInvitation(to, p.getRoom(),
+                                                                       false, 
null, Valid.Period, owner, to.getLanguageId()
+                                                                       , 
CalendarHelper.getDate(start.getModelObject(), to.getTimeZoneId())
+                                                                       , 
CalendarHelper.getDate(end.getModelObject(), to.getTimeZoneId()), null);
+
+                                                       invitationLink = 
getInvitationLink(i, WebSession.get().getExtendedProperties().getBaseUrl());
+
+                                                       if (invitationLink == 
null) {
+                                                               invitationLink 
= "";
+                                                       } else {
+                                                               invitationLink 
= "<br/>" //
+                                                                               
+ Application.getString("503", to.getLanguageId())
+                                                                               
+ "<br/><a href='" + invitationLink
+                                                                               
+ "'>"
+                                                                               
+ Application.getString("504", to.getLanguageId()) + "</a><br/>";
+                                                       }
+                                               }
+
+                                               String subj = p.getSubject() == 
null ? "" : p.getSubject();
+                                               
handler.send(to.getAddress().getEmail(),
+                                                               
Application.getString("1301", to.getLanguageId()) + subj,
+                                                               (p.getMessage() 
== null ? "" : p.getMessage().replaceAll("\\<.*?>", "")) + aLinkHTML + 
invitationLink);
+                                       }
+                               }
+                               MessageDialog.this.close(target);
+                               onSend(target);
+                       }
+               }); // send
+               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Secondary, new ResourceModel("lbl.cancel")) {
+                       private static final long serialVersionUID = 1L;
+
+                       public void onClick(AjaxRequestTarget target) {
+                               MessageDialog.this.close(target);
+                       }
+               });
 
                form.add(feedback.setOutputMarkupId(true));
                form.add(new UserMultiChoice("to", modelTo).setRequired(true));
@@ -165,124 +265,22 @@ public class MessageDialog extends 
AbstractFormDialog<PrivateMessage> {
                return this;
        }
 
-       @Override
-       public int getWidth() {
-               return 650;
-       }
-
-       public void open(IPartialPageRequestHandler handler, Long userId) {
+       public void show(IPartialPageRequestHandler handler, Long userId) {
                getModelObject().setTo(userDao.get(userId));
-               open(handler);
+               show(handler);
        }
 
        @Override
-       protected void onOpen(IPartialPageRequestHandler handler) {
+       public Modal<PrivateMessage> show(IPartialPageRequestHandler handler) {
                if (getModel().getObject().getTo() != null) {
                        modelTo.getObject().add(getModel().getObject().getTo());
                }
                handler.add(form);
-               super.onOpen(handler);
+               return super.show(handler);
        }
 
-       @Override
-       protected List<DialogButton> getButtons() {
-               return Arrays.asList(send, cancel);
-       }
-
-       @Override
-       public DialogButton getSubmitButton() {
-               return send;
-       }
-
-       @Override
-       public Form<PrivateMessage> getForm() {
-               return form;
-       }
-
-       @Override
-       protected void onError(AjaxRequestTarget target, DialogButton btn) {
-               target.add(feedback);
-       }
-
-       @Override
-       protected void onSubmit(AjaxRequestTarget target, DialogButton btn) {
-               PrivateMessage m = getModelObject();
-               m.setInserted(new Date());
-               User owner = userDao.get(getUserId());
-               if (m.isBookedRoom()) {
-                       Room r = m.getRoom();
-                       r.setName(m.getSubject());
-                       r.setComment("");
-                       r.setCapacity(100L);
-                       r.setAppointment(true);
-                       r.setAllowUserQuestions(true);
-                       r = roomDao.update(r, getUserId());
-                       Appointment a = new Appointment();
-                       a.setTitle(m.getSubject());
-                       a.setDescription(m.getMessage());
-                       a.setRoom(r);
-                       
a.setStart(CalendarWebHelper.getDate(start.getModelObject()));
-                       
a.setEnd(CalendarWebHelper.getDate(end.getModelObject()));
-                       List<MeetingMember> attendees = new ArrayList<>();
-                       for (User to : modelTo.getObject()) {
-                               MeetingMember mm = new MeetingMember();
-                               mm.setUser(to);
-                               mm.setDeleted(false);
-                               mm.setInserted(a.getInserted());
-                               mm.setUpdated(a.getUpdated());
-                               mm.setAppointment(a);
-                               attendees.add(mm);
-                       }
-                       a.setOwner(owner);
-                       a.setMeetingMembers(attendees);
-                       apptDao.update(a, getUserId(), false);
-                       m.setRoom(r);
-               } else {
-                       m.setRoom(null);
-               }
-               for (User to : modelTo.getObject()) {
-                       if (to.getId() == null) {
-                               userDao.update(to, getUserId());
-                       }
-                       //to send
-                       PrivateMessage p = new PrivateMessage(m);
-                       p.setTo(to);
-                       p.setFolderId(SENT_FOLDER_ID);
-                       msgDao.update(p, getUserId());
-                       //to inbox
-                       p = new PrivateMessage(m);
-                       p.setOwner(to);
-                       p.setFolderId(INBOX_FOLDER_ID);
-                       msgDao.update(p, getUserId());
-                       if (to.getAddress() != null) {
-                               String aLinkHTML =      (isPrivate && 
to.getType() == Type.user) ? "<br/><br/>" + "<a href='" + getContactsLink() + 
"'>"
-                                                       + 
Application.getString("1302", to.getLanguageId()) + "</a><br/>" : "";
-                               String invitationLink = "";
-                               if (p.isBookedRoom()) {
-                                       Invitation i = 
inviteManager.getInvitation(to, p.getRoom(),
-                                                       false, null, 
Valid.Period, owner, to.getLanguageId()
-                                                       , 
CalendarHelper.getDate(start.getModelObject(), to.getTimeZoneId())
-                                                       , 
CalendarHelper.getDate(end.getModelObject(), to.getTimeZoneId()), null);
-
-                                       invitationLink = getInvitationLink(i, 
WebSession.get().getExtendedProperties().getBaseUrl());
-
-                                       if (invitationLink == null) {
-                                               invitationLink = "";
-                                       } else {
-                                               invitationLink = "<br/>" //
-                                                               + 
Application.getString("503", to.getLanguageId())
-                                                               + "<br/><a 
href='" + invitationLink
-                                                               + "'>"
-                                                               + 
Application.getString("504", to.getLanguageId()) + "</a><br/>";
-                                       }
-                               }
-
-                               String subj = p.getSubject() == null ? "" : 
p.getSubject();
-                               handler.send(to.getAddress().getEmail(),
-                                               Application.getString("1301", 
to.getLanguageId()) + subj,
-                                               (p.getMessage() == null ? "" : 
p.getMessage().replaceAll("\\<.*?>", "")) + aLinkHTML + invitationLink);
-                       }
-               }
+       protected void onSend(IPartialPageRequestHandler handler) {
+               // can be overriden
        }
 
        @Override
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.html
index 1670e4e..b7d748f 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.html
@@ -20,9 +20,9 @@
 -->
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org";>
-<wicket:panel>
+<wicket:extend>
        <div wicket:id="container">
                <div wicket:id="body"></div>
        </div>
-</wicket:panel>
+</wicket:extend>
 </html>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java
index 38b3a53..0f9e050 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java
@@ -20,74 +20,77 @@ package org.apache.openmeetings.web.user;
 
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 
-import java.util.Arrays;
-import java.util.List;
-
 import org.apache.openmeetings.db.dao.user.UserContactDao;
 import org.apache.openmeetings.web.user.profile.UserProfilePanel;
 import org.apache.openmeetings.web.util.ContactsHelper;
+import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
-import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxLink;
+import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 
-public class UserInfoDialog extends AbstractDialog<String> {
+public class UserInfoDialog extends Modal<String> {
        private static final long serialVersionUID = 1L;
        private WebMarkupContainer container = new 
WebMarkupContainer("container");
-       private DialogButton cancel;
-       private DialogButton message;
-       private DialogButton contacts;
        private MessageDialog newMessage;
        private long userId;
        @SpringBean
        private UserContactDao contactDao;
+       private BootstrapAjaxLink<String> message;
+       private BootstrapAjaxLink<String> contacts;
 
        public UserInfoDialog(String id, MessageDialog newMessage) {
-               super(id, "");
+               super(id);
                this.newMessage = newMessage;
        }
 
        @Override
        protected void onInitialize() {
-               getTitle().setObject(getString("1235"));
-               cancel = new DialogButton("cancel", getString("lbl.cancel"));
-               message = new DialogButton("message", getString("1253"));
-               contacts = new DialogButton("contacts", getString("1186"));
+               header(new ResourceModel("1235"));
+               setCloseOnEscapeKey(true);
+               setBackdrop(Backdrop.STATIC);
+               addButton(contacts = new BootstrapAjaxLink<>("button", 
Model.of(""), Buttons.Type.Info, new ResourceModel("1186")) {
+                       private static final long serialVersionUID = 1L;
+
+                       public void onClick(AjaxRequestTarget target) {
+                               ContactsHelper.addUserToContactList(userId);
+                               UserInfoDialog.this.close(target);
+                       }
+               });
+               addButton(message = new BootstrapAjaxLink<>("button", 
Model.of(""), Buttons.Type.Primary, new ResourceModel("1253")) {
+                       private static final long serialVersionUID = 1L;
+
+                       public void onClick(AjaxRequestTarget target) {
+                               newMessage.reset(false).show(target, userId);
+                               UserInfoDialog.this.close(target);
+                       }
+               });
+               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Secondary, new ResourceModel("lbl.cancel")) {
+                       private static final long serialVersionUID = 1L;
+
+                       public void onClick(AjaxRequestTarget target) {
+                               UserInfoDialog.this.close(target);
+                       }
+               });
                add(container.add(new 
WebMarkupContainer("body")).setOutputMarkupId(true));
                super.onInitialize();
        }
 
-       public void open(IPartialPageRequestHandler handler, long userId) {
+       public void show(IPartialPageRequestHandler handler, long userId) {
                this.userId = userId;
-               contacts.setVisible(userId != getUserId() && 
contactDao.get(userId, getUserId()) == null, handler);
-               message.setVisible(userId != getUserId(), handler);
+               contacts.setVisible(userId != getUserId() && 
contactDao.get(userId, getUserId()) == null);
+               message.setVisible(userId != getUserId());
                container.replace(new UserProfilePanel("body", userId));
-               handler.add(container);
-               open(handler);
+               handler.add(container, contacts, contacts);
+               show(handler);
        }
 
        public WebMarkupContainer getContainer() {
                return container;
        }
-
-       @Override
-       public int getWidth() {
-               return 600;
-       }
-
-       @Override
-       protected List<DialogButton> getButtons() {
-               return Arrays.asList(contacts, message, cancel);
-       }
-
-       @Override
-       public void onClose(IPartialPageRequestHandler handler, DialogButton 
button) {
-               if (message.equals(button)) {
-                       newMessage.reset(false).open(handler, userId);
-               } else if (contacts.equals(button)) {
-                       ContactsHelper.addUserToContactList(userId);
-               }
-       }
 }
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 ff58d25..75d0979 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
@@ -86,7 +86,6 @@ import org.slf4j.LoggerFactory;
 import org.wicketstuff.select2.Select2MultiChoice;
 
 import com.googlecode.wicket.jquery.core.JQueryBehavior;
-import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.ui.JQueryUIBehavior;
 import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.WysiwygEditor;
 import 
com.googlecode.wicket.jquery.ui.plugins.wysiwyg.toolbar.DefaultWysiwygToolbar;
@@ -96,8 +95,8 @@ import 
com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
 import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
-import com.googlecode.wicket.kendo.ui.form.datetime.local.DateTimePicker;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
 public class AppointmentDialog extends AbstractFormDialog<Appointment> {
        private static final long serialVersionUID = 1L;
@@ -109,7 +108,7 @@ public class AppointmentDialog extends 
AbstractFormDialog<Appointment> {
        private DialogButton delete;
        private DialogButton enterRoom;
        private final CalendarPanel calendarPanel;
-       private final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        MessageDialog confirmDelete;
        private final WebMarkupContainer sipContainer = new 
WebMarkupContainer("sip-container");
        private final RadioGroup<InviteeType> rdi = new 
RadioGroup<>("inviteeType", Model.of(InviteeType.user));
@@ -310,8 +309,8 @@ public class AppointmentDialog extends 
AbstractFormDialog<Appointment> {
                private final boolean myRoomsAllowed;
                private boolean createRoom = true;
                private Room appRoom = new Room();
-               private final DateTimePicker start = new 
OmDateTimePicker("start", Model.of(LocalDateTime.now()));
-               private final DateTimePicker end = new OmDateTimePicker("end", 
Model.of(LocalDateTime.now()));
+               private final OmDateTimePicker start = new 
OmDateTimePicker("start", Model.of(LocalDateTime.now()));
+               private final OmDateTimePicker end = new 
OmDateTimePicker("end", Model.of(LocalDateTime.now()));
                private final PasswordTextField pwd = new 
PasswordTextField("password");
                private final Label owner = new Label("aowner", Model.of(""));
                private final WebMarkupContainer ownerPanel = new 
WebMarkupContainer("owner-row");
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarDialog.java
index ced74b3..330e465 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarDialog.java
@@ -48,14 +48,14 @@ import org.apache.wicket.validation.validator.UrlValidator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
 import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
 import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
 /**
  * Multipurpose Calendar Dialog form. This provides the ability to ask for a 
user prompt,
@@ -67,7 +67,7 @@ public class CalendarDialog extends 
AbstractFormDialog<OmCalendar> {
        private static final Logger log = 
LoggerFactory.getLogger(CalendarDialog.class);
        private CalendarPanel calendarPanel;
 
-       private final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        private DialogButton save;
        private DialogButton cancel;
        private DialogButton delete;
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
index f088fbd..553d912 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
@@ -22,7 +22,7 @@
 <html xmlns:wicket="http://wicket.apache.org";>
 <wicket:panel>
        <div wicket:id="toolbar" class="btn-toolbar chat-toolbar" 
data-role="editor-toolbar">
-               <div class="btn-group dropup">
+               <div class="dropdown">
                        <a id="emoticons" class="chat btn btn-default emt 
dropdown-toggle" data-toggle="dropdown" title="Emoticons"></a>
                        <ul class="chat dropdown-menu" >
                                <li>
@@ -31,18 +31,17 @@
                                </li>
                        </ul>
                </div>
-               <div class="btn-group dropup">
-                       <a id="fontSize" class="chat btn btn-default 
dropdown-toggle" data-toggle="dropdown" title="Font Size"> A <strong 
class="caret"></strong></a>
+               <div class="dropdown">
+                       <a id="fontSize" class="chat btn btn-default 
dropdown-toggle" data-toggle="dropdown" role="button" title="Font Size"> A </a>
                        <ul class="dropdown-menu">
                                <li><a data-edit="fontSize 5"><span 
class="font-huge">Huge</span></a></li>
                                <li><a data-edit="fontSize 3"><span 
class="font-small">Normal</span></a></li>
                                <li><a data-edit="fontSize 1"><span 
class="font-tiny">Small</span></a></li>
                        </ul>
                </div>
-               <div class="btn-group dropup">
+               <div class="dropdown">
                        <a id="fontStyle" class="chat btn btn-default 
dropdown-toggle" data-toggle="dropdown" title="Font Style">
-                               <span class="chat-tool-icon">&nbsp;</span>
-                               <strong class="caret"></strong>
+                               <i class="fas fa-cog"></i>
                        </a>
                        <ul class="dropdown-menu btns-only">
                                <li><a class="chat-btn chat-tool-icon btn 
btn-default bold" id="bold" data-edit="bold" title="Bold (Ctrl/Cmd+B)"> B 
</a></li>
@@ -51,17 +50,18 @@
                                <li><a class="chat-btn chat-tool-icon btn 
btn-default under" id="underline" data-edit="underline" title="Underline 
(Ctrl/Cmd+U)"> U </a></li>
                        </ul>
                </div>
-               <div class="btn-group dropup">
-                       <a id="hyperlink" class="chat btn chat-tool-icon 
btn-default dropdown-toggle" data-toggle="dropdown" title="Hyperlink">&nbsp;</a>
+               <div class="dropdown">
+                       <a id="hyperlink" class="chat btn btn-default 
dropdown-toggle" data-toggle="dropdown" title="Hyperlink">
+                               <i class="fas fa-link"></i>
+                       </a>
                        <div wicket:id="hyperlink" class="dropdown-menu 
input-append">
                                <input class="span2" placeholder="URL" 
type="text" onkeypress="if (event.keyCode === 13) 
{$(this).parent().find('button').trigger('click');}; return event.keyCode !== 
13;"/>
                                <button class="btn btn-default" 
type="button"><wicket:message key="1261"/></button>
                        </div>
                </div>
-               <div class="btn-group dropup">
+               <div class="dropdown">
                        <a id="actions" class="chat btn btn-default 
dropdown-toggle" data-toggle="dropdown" wicket:message="title:635">
-                               <span class="list chat-tool-icon">&nbsp;</span>
-                               <strong class="caret"></strong>
+                               <i class="fas fa-bars"></i>
                        </a>
                        <ul class="dropdown-menu btns-only">
                                <li><a class="chat-btn chat-tool-icon btn 
btn-default save" wicket:message="title:197" wicket:id="save"></a></li>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/raw-chat.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/raw-chat.js
index 9c9ed73..2d44a72 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/raw-chat.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/raw-chat.js
@@ -97,7 +97,7 @@ var Chat = function() {
                }
                const emtBtn = $('#emoticons');
                emtBtn.html('');
-               emtBtn.append(' ' + emoticon.emoticonize(':)') + ' <b 
class="caret"></b>');
+               emtBtn.append(' ' + emoticon.emoticonize(':)'));
                const a = $('#chat .audio');
                const sbtn = $('#chat .send-btn');
                { //scope
@@ -105,7 +105,6 @@ var Chat = function() {
                        _updateAudioBtn(a);
                        _updateSendBtn(sbtn)
                }
-               $('#chat .chat-btn').hover(function(){ 
$(this).addClass('ui-state-hover') }, function(){ 
$(this).removeClass('ui-state-hover') });
                a.off().click(function() {
                        const s = _load();
                        muted = s.chat.muted = !s.chat.muted;
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminCleanupInfoDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminCleanupInfoDialog.java
index 9ade356..8987974 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminCleanupInfoDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminCleanupInfoDialog.java
@@ -40,11 +40,11 @@ import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
-import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.ui.form.button.ConfirmAjaxButton;
 import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
 public class AdminCleanupInfoDialog extends AbstractDialog<String> {
        private static final long serialVersionUID = 1L;
@@ -56,7 +56,7 @@ public class AdminCleanupInfoDialog extends 
AbstractDialog<String> {
        private final Label streamsSize;
        private final CleanupEntityUnitPanel fin;
        private final WebMarkupContainer container = new 
WebMarkupContainer("container");
-       private final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        @SpringBean
        private UserDao userDao;
        @SpringBean
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/ChangePasswordDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/ChangePasswordDialog.java
index 6c100f5..73a0f28 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/ChangePasswordDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/ChangePasswordDialog.java
@@ -35,10 +35,10 @@ import org.apache.wicket.util.string.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
 public class ChangePasswordDialog extends AbstractFormDialog<String> {
        private static final long serialVersionUID = 1L;
@@ -71,7 +71,7 @@ public class ChangePasswordDialog extends 
AbstractFormDialog<String> {
                        super.onValidate();
                }
        };
-       private final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
+       private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        @SpringBean
        private UserDao userDao;
 
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java
index e8f8815..00e739c 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java
@@ -18,8 +18,21 @@
  */
 package org.apache.openmeetings.web.user.profile;
 
-import com.googlecode.wicket.jquery.core.JQueryBehavior;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import static 
org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;
+import static 
org.apache.openmeetings.db.entity.user.PrivateMessage.SENT_FOLDER_ID;
+import static 
org.apache.openmeetings.db.entity.user.PrivateMessage.TRASH_FOLDER_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
+import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static 
org.apache.openmeetings.web.util.CallbackFunctionHelper.addOnClick;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.dao.user.PrivateMessageDao;
 import org.apache.openmeetings.db.dao.user.PrivateMessageFolderDao;
@@ -68,20 +81,8 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.model.util.ListModel;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import static 
org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;
-import static 
org.apache.openmeetings.db.entity.user.PrivateMessage.SENT_FOLDER_ID;
-import static 
org.apache.openmeetings.db.entity.user.PrivateMessage.TRASH_FOLDER_ID;
-import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
-import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static 
org.apache.openmeetings.web.util.CallbackFunctionHelper.addOnClick;
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
 
 public class MessagesContactsPanel extends UserBasePanel {
        private static final long serialVersionUID = 1L;
@@ -353,7 +354,7 @@ public class MessagesContactsPanel extends UserBasePanel {
                                                pm.setTo(opm.getFrom());
                                                pm.setSubject(String.format("%s 
%s", getString("messages.subject.re"), opm.getSubject()));
                                                
pm.setMessage(String.format("<br/><blockquote class=\"quote\">%s</blockquote>", 
opm.getMessage()));
-                                               newDlg.open(target);
+                                               newDlg.show(target);
                                        }
                                }
                        }));
diff --git a/openmeetings-web/src/main/webapp/css/raw-chat.css 
b/openmeetings-web/src/main/webapp/css/raw-chat.css
index 84c6b51..4f11a04 100644
--- a/openmeetings-web/src/main/webapp/css/raw-chat.css
+++ b/openmeetings-web/src/main/webapp/css/raw-chat.css
@@ -112,12 +112,6 @@ html[dir="rtl"] #chat .messageArea .icons {
 .save.chat-tool-icon {
        background-image: url(images/file_save_as.png);
 }
-#chat #hyperlink {
-       background-image: url(images/link.png);
-}
-#chat #fontStyle span {
-       background-image: url(images/settings.png);
-}
 .send-ctrl.chat-tool-icon {
        background-image: url(images/key_ctrl.png);
        background-position: 0px 0px;
@@ -175,22 +169,12 @@ html[dir="rtl"] .main.room #chatPanel {
 .main.room #chatPanel.closed #chatPopup #chat {
        display: none;
 }
-ul.dropdown-menu.btns-only, ul.dropdown-menu.btns-only li {
-       max-width: 62px;
-       min-width: 62px;
-}
-ul.dropdown-menu.btns-only li .chat-btn {
-       float: none !important;
-}
 .emt {
        font-size: 10pt;
 }
 .chat.btn{
        font-weight: bold;
 }
-.chat.dropdown-menu {
-       left: -50px;
-}
 .chat-msg-container {
        position: relative;
 }
diff --git a/openmeetings-web/src/main/webapp/css/raw-general-rtl.css 
b/openmeetings-web/src/main/webapp/css/raw-general-rtl.css
index a9791b0..f2dbedf 100644
--- a/openmeetings-web/src/main/webapp/css/raw-general-rtl.css
+++ b/openmeetings-web/src/main/webapp/css/raw-general-rtl.css
@@ -146,12 +146,6 @@ html[dir="rtl"] span.css-emoticon.un-transformed-emoticon
 html[dir="rtl"] span.css-emoticon {
        transform: rotate(-90deg) !important;
 }
-html[dir="rtl"] .chat.dropdown-menu {
-       left: auto !important; /* IE */
-       left: initial !important;
-       right: -50px !important;
-       float: right !important;
-}
 html[dir="rtl"] .adminForm label
 , html[dir="rtl"] .adminForm input
 , html[dir="rtl"] .adminForm select

Reply via email to