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 4aee526  [OPENMEETINGS-2165] initial work on room
4aee526 is described below

commit 4aee526d1590ff10f483896749a061db1edde06f
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Sun Feb 16 21:19:56 2020 +0700

    [OPENMEETINGS-2165] initial work on room
---
 .../web/admin/labels/AddLanguageDialog.java        |   1 -
 .../web/admin/users/PasswordDialog.java            |   6 +-
 .../openmeetings/web/admin/users/UsersPanel.java   |   5 +-
 .../openmeetings/web/common/InvitationDialog.java  |   5 +-
 .../apache/openmeetings/web/common/NameDialog.java |   5 +-
 .../{OmButton.java => OmModalCloseButton.java}     |  28 ++--
 .../common/confirmation/ConfirmationDialog.java    |   5 +-
 .../web/common/tree/ConvertingErrorsDialog.java    |   2 -
 .../apache/openmeetings/web/pages/HashPage.java    |   6 +-
 .../web/pages/InvitationPasswordDialog.java        |   1 +
 .../apache/openmeetings/web/pages/ResetPage.java   |   9 +-
 .../web/pages/auth/ForgetPasswordDialog.java       |   6 +-
 .../web/pages/auth/RegisterDialog.java             |   6 +-
 .../openmeetings/web/pages/auth/SignInPage.java    |  12 +-
 .../openmeetings/web/room/EventDetailDialog.html   |   4 +-
 .../openmeetings/web/room/EventDetailDialog.java   |  38 ++---
 .../openmeetings/web/room/IconTextModal.java       |   1 -
 .../apache/openmeetings/web/room/RoomPanel.html    |   4 +-
 .../apache/openmeetings/web/room/RoomPanel.java    |   2 +-
 .../openmeetings/web/room/activities/activities.js |   2 +-
 .../openmeetings/web/room/menu/ActionsSubMenu.java |   2 +-
 .../web/{common => room/menu}/OmButton.java        |   2 +-
 .../openmeetings/web/room/menu/PollsSubMenu.java   |  10 +-
 .../openmeetings/web/room/menu/RoomMenuPanel.java  |   1 -
 .../web/room/menu/SipDialerDialog.java             |  74 ++++------
 .../web/room/poll/CreatePollDialog.html            |   4 +-
 .../web/room/poll/CreatePollDialog.java            |  67 ++++-----
 .../web/room/poll/PollResultsDialog.html           |   6 +-
 .../web/room/poll/PollResultsDialog.java           | 163 ++++++++++-----------
 .../openmeetings/web/room/poll/VoteDialog.html     |   4 +-
 .../openmeetings/web/room/poll/VoteDialog.java     |  92 +++++-------
 .../org/apache/openmeetings/web/room/raw-room.js   |  39 ++---
 .../openmeetings/web/room/raw-video-manager.js     |   2 +-
 .../apache/openmeetings/web/room/raw-video-util.js |   2 +-
 .../org/apache/openmeetings/web/room/raw-video.js  |   2 +-
 .../openmeetings/web/room/sidebar/RoomSidebar.html |  39 +++--
 .../openmeetings/web/room/sidebar/RoomSidebar.java |   4 +-
 .../web/room/sidebar/UploadDialog.java             |   5 +-
 .../apache/openmeetings/web/user/AboutDialog.java  |   2 -
 .../web/user/InviteUserMessageDialog.java          |   6 +-
 .../web/user/InviteUserToRoomDialog.java           |   7 +-
 .../openmeetings/web/user/MessageDialog.java       |   6 +-
 .../openmeetings/web/user/UserInfoDialog.java      |   6 +-
 .../web/user/calendar/AppointmentDialog.java       |   5 +-
 .../web/user/calendar/CalendarDialog.java          |   5 +-
 .../apache/openmeetings/web/user/chat/raw-chat.js  |   4 +-
 .../dashboard/admin/AdminCleanupInfoDialog.java    |   5 +-
 .../web/user/profile/ChangePasswordDialog.java     |   6 +-
 openmeetings-web/src/main/webapp/css/raw-room.css  |  71 +++++----
 49 files changed, 355 insertions(+), 434 deletions(-)

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 8dab3c2..0530e35 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
@@ -53,7 +53,6 @@ public class AddLanguageDialog extends Modal<String> {
        @Override
        protected void onInitialize() {
                header(new ResourceModel("362"));
-               setBackdrop(Backdrop.STATIC);
 
                addButton(new BootstrapAjaxButton("button", new 
ResourceModel("366"), form, Buttons.Type.Outline_Primary) {
                        private static final long serialVersionUID = 1L;
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 a6fa5a8..e29b71e 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
@@ -21,6 +21,7 @@ package org.apache.openmeetings.web.admin.users;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.html.form.Form;
@@ -34,7 +35,6 @@ import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxButt
 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;
-import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 
 public class PasswordDialog extends Modal<String> {
        private static final long serialVersionUID = 1L;
@@ -56,8 +56,6 @@ public class PasswordDialog extends Modal<String> {
        @Override
        protected void onInitialize() {
                header(new ResourceModel("537"));
-               setCloseOnEscapeKey(true);
-               setBackdrop(Backdrop.STATIC);
 
                addButton(new BootstrapAjaxButton("button", new 
ResourceModel("54"), form, Buttons.Type.Outline_Primary) {
                        private static final long serialVersionUID = 1L;
@@ -83,7 +81,7 @@ public class PasswordDialog extends Modal<String> {
                                }
                        }
                }); // OK
-               addButton(new ModalCloseButton(new 
ResourceModel("lbl.cancel")).type(Buttons.Type.Outline_Secondary));
+               addButton(OmModalCloseButton.of());
                add(form.add(feedback.setOutputMarkupId(true), 
pass.setRequired(false).setLabel(new 
ResourceModel("110")).setOutputMarkupPlaceholderTag(true).setOutputMarkupId(true)));
                super.onInitialize();
        }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UsersPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UsersPanel.java
index c83bcb3..a5286d2 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UsersPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UsersPanel.java
@@ -26,6 +26,7 @@ import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.web.admin.AdminBasePanel;
 import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.openmeetings.web.common.PagedEntityListPanel;
 import org.apache.openmeetings.web.data.DataViewContainer;
 import org.apache.openmeetings.web.data.OmOrderByBorder;
@@ -41,9 +42,7 @@ import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
-import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
-import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.utilities.ColorBehavior;
 
 @AuthorizeInstantiation({"Admin", "GroupAdmin"})
@@ -109,7 +108,7 @@ public class UsersPanel extends AdminBasePanel {
                                .withLabel(new ResourceModel("warn.nogroup"))
                                .withErrorIcon(ColorBehavior.Color.Warning)
                                .header(new ResourceModel("797"))
-                               .addButton(new ModalCloseButton(new 
ResourceModel("54")).type(Buttons.Type.Outline_Secondary));
+                               .addButton(OmModalCloseButton.of("54"));
 
                form = new UserForm("form", listContainer, 
getNewUserInstance(userDao.get(getUserId())), warning);
                form.setNewVisible(true);
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/InvitationDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/InvitationDialog.java
index 4eeebcf..ee07f5c 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/InvitationDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/InvitationDialog.java
@@ -25,7 +25,6 @@ import org.apache.wicket.model.ResourceModel;
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxButton;
 import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
-import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 
 public class InvitationDialog extends Modal<Invitation> {
        private static final long serialVersionUID = 1L;
@@ -41,8 +40,6 @@ public class InvitationDialog extends Modal<Invitation> {
        @Override
        protected void onInitialize() {
                header(new ResourceModel("213"));
-               setCloseOnEscapeKey(true);
-               setBackdrop(Backdrop.STATIC);
 
                addButton(generate = new BootstrapAjaxButton("button", new 
ResourceModel("1526"), form, Buttons.Type.Outline_Primary) {
                        private static final long serialVersionUID = 1L;
@@ -70,7 +67,7 @@ public class InvitationDialog extends Modal<Invitation> {
                                InvitationDialog.this.onClick(target, 
InvitationForm.Action.SEND);
                        }
                });
-               addButton(new ModalCloseButton(new 
ResourceModel("lbl.cancel")).type(Buttons.Type.Outline_Secondary));
+               addButton(OmModalCloseButton.of());
                super.onInitialize();
        }
 
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 a5092ab..8edfa86 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
@@ -32,7 +32,6 @@ import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxButt
 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;
-import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 
 public abstract class NameDialog extends Modal<String> {
        private static final long serialVersionUID = 1L;
@@ -54,10 +53,8 @@ public abstract class NameDialog extends Modal<String> {
        @Override
        protected void onInitialize() {
                header(getTitle());
-               setCloseOnEscapeKey(true);
-               setBackdrop(Backdrop.STATIC);
 
-               addButton(new ModalCloseButton(new 
ResourceModel("lbl.cancel")).type(Buttons.Type.Outline_Secondary));
+               addButton(OmModalCloseButton.of());
                addButton(new BootstrapAjaxButton("button", getAddBtnLabel(), 
form, Buttons.Type.Outline_Primary) {
                        private static final long serialVersionUID = 1L;
 
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmButton.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmModalCloseButton.java
similarity index 61%
copy from 
openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmButton.java
copy to 
openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmModalCloseButton.java
index 9075d68..662b195 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmButton.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmModalCloseButton.java
@@ -18,27 +18,21 @@
  */
 package org.apache.openmeetings.web.common;
 
-import static org.apache.openmeetings.web.common.BasePanel.EVT_CLICK;
+import org.apache.wicket.model.ResourceModel;
 
-import org.apache.wicket.ajax.AjaxEventBehavior;
-import org.apache.wicket.ajax.AjaxRequestTarget;
+import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 
-import com.googlecode.wicket.jquery.ui.form.button.Button;
-
-public abstract class OmButton extends Button {
+public class OmModalCloseButton extends ModalCloseButton {
        private static final long serialVersionUID = 1L;
 
-       public OmButton(String id) {
-               super(id);
-               add(new AjaxEventBehavior(EVT_CLICK) {
-                       private static final long serialVersionUID = 1L;
-
-                       @Override
-                       protected void onEvent(AjaxRequestTarget target) {
-                               OmButton.this.onClick(target);
-                       }
-               });
+       public static ModalCloseButton of() {
+               return of("lbl.cancel");
        }
 
-       public abstract void onClick(AjaxRequestTarget target);
+       public static ModalCloseButton of(String lblKey) {
+               ModalCloseButton btn = new ModalCloseButton(new 
ResourceModel(lblKey)).type(Buttons.Type.Outline_Secondary);
+               btn.setOutputMarkupId(false);
+               return btn;
+       }
 }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationDialog.java
index 092dbfd..8a125c0 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationDialog.java
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.web.common.confirmation;
 
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
@@ -25,7 +26,6 @@ import org.apache.wicket.model.ResourceModel;
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.behavior.CssClassNameAppender;
 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.ModalCloseButton;
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.TextContentModal;
 import de.agilecoders.wicket.core.markup.html.bootstrap.image.IconType;
 import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesome5IconType;
@@ -37,7 +37,6 @@ public abstract class ConfirmationDialog extends 
TextContentModal {
        public ConfirmationDialog(String id, IModel<String> title, 
IModel<String> model) {
                super(id, model);
                header(title);
-               setBackdrop(Backdrop.STATIC);
        }
 
        private BootstrapAjaxLink<String> getOkButton() {
@@ -71,7 +70,7 @@ public abstract class ConfirmationDialog extends 
TextContentModal {
                super.onInitialize();
                add(new CssClassNameAppender("om-confirm-dialog"));
                addButton(getOkButton());
-               addButton(new ModalCloseButton(new 
ResourceModel("lbl.cancel")).type(Buttons.Type.Outline_Secondary));
+               addButton(OmModalCloseButton.of());
        }
 
        protected abstract void onConfirm(AjaxRequestTarget target);
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java
index 560f4f5..cd8b0de 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java
@@ -71,8 +71,6 @@ public class ConvertingErrorsDialog extends 
Modal<BaseFileItem> {
        @Override
        protected void onInitialize() {
                header(new ResourceModel("887"));
-               setCloseOnEscapeKey(true);
-               setBackdrop(Backdrop.STATIC);
                size(Modal.Size.Large);
 
                super.onInitialize();
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/HashPage.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/HashPage.java
index f25f015..c54df52 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/HashPage.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/HashPage.java
@@ -36,6 +36,7 @@ import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.IUpdatable;
 import org.apache.openmeetings.web.common.MainPanel;
 import org.apache.openmeetings.web.common.OmAjaxClientInfoBehavior;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.openmeetings.web.common.OmWebSocketPanel;
 import org.apache.openmeetings.web.room.IconTextModal;
 import org.apache.openmeetings.web.room.NetTestPanel;
@@ -57,9 +58,6 @@ import 
org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.apache.wicket.util.string.StringValue;
 
-import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
-import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
-
 public class HashPage extends BaseInitedPage implements IUpdatable {
        private static final long serialVersionUID = 1L;
        public static final String APP = "app";
@@ -209,7 +207,7 @@ public class HashPage extends BaseInitedPage implements 
IUpdatable {
                add(new IconTextModal("access-denied")
                                .withLabel(errorMsg)
                                .withErrorIcon()
-                               .addButton(new ModalCloseButton(new 
ResourceModel("54")).type(Buttons.Type.Outline_Secondary))
+                               .addButton(OmModalCloseButton.of("54"))
                                .header(new ResourceModel("invalid.hash"))
                                .show(error)
                                );
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 12b67ba..351a602 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
@@ -53,6 +53,7 @@ public class InvitationPasswordDialog extends 
Modal<Invitation> {
        @Override
        protected void onInitialize() {
                header(new ResourceModel("230"));
+               setCloseOnEscapeKey(false);
                setBackdrop(Backdrop.STATIC);
 
                password.add(new IValidator<String>(){
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.java
index 1aa0e58..b0630b9 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.java
@@ -21,16 +21,14 @@ package org.apache.openmeetings.web.pages;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.openmeetings.web.pages.auth.ResetPasswordDialog;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
-import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
-import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal.Backdrop;
-import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.TextContentModal;
 
 public class ResetPage extends BaseNotInitedPage {
@@ -54,9 +52,8 @@ public class ResetPage extends BaseNotInitedPage {
                        if (user != null) {
                                add(new ResetPasswordDialog("resetPassword", 
user, resetInfo));
                                add(resetInfo.header(new ResourceModel("325"))
-                                               .addButton(new 
ModalCloseButton(new ResourceModel("54")).type(Buttons.Type.Outline_Secondary))
-                                               .setUseCloseHandler(true)
-                                               .setBackdrop(Backdrop.STATIC));
+                                               
.addButton(OmModalCloseButton.of("54"))
+                                               .setUseCloseHandler(true));
                                return;
                        }
                }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java
index 6f9a539..a540d73 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java
@@ -30,6 +30,7 @@ import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.service.mail.template.ResetPasswordTemplate;
 import org.apache.openmeetings.web.common.Captcha;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.openmeetings.web.pages.ResetPage;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -59,7 +60,6 @@ import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxButt
 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;
-import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 
 public class ForgetPasswordDialog extends Modal<String> {
        private static final Logger log = 
LoggerFactory.getLogger(ForgetPasswordDialog.class);
@@ -93,14 +93,12 @@ public class ForgetPasswordDialog extends Modal<String> {
        @Override
        protected void onInitialize() {
                header(new ResourceModel("312"));
-               setCloseOnEscapeKey(true);
                setUseCloseHandler(true);
-               setBackdrop(Backdrop.STATIC);
 
                addButton(new BootstrapAjaxButton("button", new 
ResourceModel("317"), form, Buttons.Type.Outline_Primary) {
                        private static final long serialVersionUID = 1L;
                }); // Send
-               addButton(new ModalCloseButton(new 
ResourceModel("lbl.cancel")).type(Buttons.Type.Outline_Secondary));
+               addButton(OmModalCloseButton.of());
 
                add(form);
                super.onInitialize();
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
index 8d34a3f..5cb41d3 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
@@ -31,6 +31,7 @@ import org.apache.openmeetings.db.entity.user.Address;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.Captcha;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.openmeetings.web.pages.PrivacyPage;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
@@ -55,7 +56,6 @@ import org.slf4j.LoggerFactory;
 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;
-import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.spinner.SpinnerAjaxButton;
 
 public class RegisterDialog extends Modal<String> {
@@ -91,12 +91,10 @@ public class RegisterDialog extends Modal<String> {
        @Override
        protected void onInitialize() {
                header(new ResourceModel("113"));
-               setCloseOnEscapeKey(true);
                setUseCloseHandler(true);
-               setBackdrop(Backdrop.STATIC);
 
                addButton(new SpinnerAjaxButton("button", new 
ResourceModel("121"), form, Buttons.Type.Outline_Primary)); // register
-               addButton(new ModalCloseButton(new 
ResourceModel("lbl.cancel")).type(Buttons.Type.Outline_Secondary));
+               addButton(OmModalCloseButton.of());
                add(form);
                add(new Label("register", 
getString("121")).setRenderBodyOnly(true), new BookmarkablePageLink<>("link", 
PrivacyPage.class));
                reset(null);
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
index a99fa6b..b2497bb 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
@@ -56,6 +56,7 @@ import org.apache.openmeetings.db.entity.user.User.Type;
 import org.apache.openmeetings.util.OmException;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.openmeetings.web.pages.BaseInitedPage;
 import org.apache.openmeetings.web.room.IconTextModal;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -73,10 +74,7 @@ import org.slf4j.LoggerFactory;
 import com.github.openjson.JSONException;
 import com.github.openjson.JSONObject;
 
-import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
-import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal.Backdrop;
-import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.TextContentModal;
 
 public class SignInPage extends BaseInitedPage {
@@ -91,7 +89,7 @@ public class SignInPage extends BaseInitedPage {
                        setCloseOnEscapeKey(false);
                        show(true);
                        setUseCloseHandler(true);
-                       addButton(new ModalCloseButton(new 
ResourceModel("54")).type(Buttons.Type.Outline_Secondary));
+                       addButton(OmModalCloseButton.of("54"));
                }
 
                @Override
@@ -201,15 +199,13 @@ public class SignInPage extends BaseInitedPage {
                                r.setVisible(allowRegister()), forget, 
kick.setVisible(WebSession.get().isKickedByAdmin()));
                add(forgetInfoDialog
                                .header(new ResourceModel("312"))
-                               .addButton(new ModalCloseButton(new 
ResourceModel("54")).type(Buttons.Type.Outline_Secondary))
+                               .addButton(OmModalCloseButton.of("54"))
                                .setUseCloseHandler(true)
-                               .setBackdrop(Backdrop.STATIC)
                );
                add(registerInfoDialog
                                .header(new ResourceModel("235"))
-                               .addButton(new ModalCloseButton(new 
ResourceModel("54")).type(Buttons.Type.Outline_Secondary))
+                               .addButton(OmModalCloseButton.of("54"))
                                .setUseCloseHandler(true)
-                               .setBackdrop(Backdrop.STATIC)
                );
        }
 
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/EventDetailDialog.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/EventDetailDialog.html
index 31c0ad4..287c194 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/EventDetailDialog.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/EventDetailDialog.html
@@ -20,7 +20,7 @@
 -->
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org";>
-<wicket:panel>
+<wicket:extend>
        <table class="w-100">
                <tr>
                        <td><wicket:message key="165"/></td>
@@ -47,5 +47,5 @@
                        <td><span 
wicket:id="owner.firstname"></span>&nbsp;<span 
wicket:id="owner.lastname"></span></td>
                </tr>
        </table>
-</wicket:panel>
+</wicket:extend>
 </html>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/EventDetailDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/EventDetailDialog.java
index 75b69cb..75a0148 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/EventDetailDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/EventDetailDialog.java
@@ -20,30 +20,30 @@ package org.apache.openmeetings.web.room;
 
 import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
 
-import java.util.Arrays;
-import java.util.List;
-
 import org.apache.openmeetings.db.entity.calendar.Appointment;
-import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.ResourceModel;
 
-import com.googlecode.wicket.jquery.core.JQueryBehavior;
-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 EventDetailDialog extends AbstractDialog<Appointment> {
+public class EventDetailDialog extends Modal<Appointment> {
        private static final long serialVersionUID = 1L;
 
        public EventDetailDialog(String id, final Appointment a) {
-               super(id, "", new CompoundPropertyModel<>(a), false);
+               super(id, new CompoundPropertyModel<>(a));
        }
 
        @Override
        protected void onInitialize() {
+               header(new ResourceModel("815"));
+               setCloseOnEscapeKey(false);
+               setBackdrop(Backdrop.FALSE);
+               size(Size.Small);
+               show(true);
+
                super.onInitialize();
-               setTitle(new ResourceModel("815"));
                add(new Label("title"));
                add(new Label("description"));
                add(new Label("owner.timeZoneId"));
@@ -51,22 +51,6 @@ public class EventDetailDialog extends 
AbstractDialog<Appointment> {
                add(new Label("end", 
getDateFormat().format(getModelObject().getEnd())));
                add(new Label("owner.firstname"));
                add(new Label("owner.lastname"));
-       }
-
-       @Override
-       public void onConfigure(JQueryBehavior behavior) {
-               super.onConfigure(behavior);
-               behavior.setOption("autoOpen", true);
-               behavior.setOption("position", "{my: 'right top', at: 'right 
bottom', of: '.room-block .menu' }");
-       }
-
-       @Override
-       public void onClose(IPartialPageRequestHandler handler, DialogButton 
button) {
-               //no-op
-       }
-
-       @Override
-       protected List<DialogButton> getButtons() {
-               return Arrays.asList(new DialogButton("cancel", new 
ResourceModel("lbl.cancel")));
+               addButton(OmModalCloseButton.of());
        }
 }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/IconTextModal.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/IconTextModal.java
index e126182..eccc3fd 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/IconTextModal.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/IconTextModal.java
@@ -36,7 +36,6 @@ public class IconTextModal extends Modal<String> {
 
        public IconTextModal(String id) {
                super(id);
-               setBackdrop(Backdrop.STATIC);
        }
 
        @Override
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
index 56d5c2f..cb1f50a 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
@@ -21,7 +21,7 @@
 <html xmlns:wicket="http://wicket.apache.org";>
 <wicket:panel>
        <div class="room-block">
-               <div class="container p-0 m-0" wicket:id="roomContainer">
+               <div class="room-container" wicket:id="roomContainer">
                        <div class="menu" wicket:id="menu"></div>
                        <div class="sidebar" wicket:id="sidebar"></div>
                        <div wicket:id="wb-area" class="wb-block">
@@ -29,7 +29,7 @@
                                <div class="wb-area" 
wicket:id="whiteboard"></div>
                        </div>
                </div>
-               <div wicket:id="event-details"></div>
+               <div class="event-details" wicket:id="event-details"></div>
                <div wicket:id="access-denied"></div>
                <div wicket:id="room-closed"></div>
                <div wicket:id="wait-recording"></div>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
index 18a0bbd..94f4cd2 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
@@ -680,7 +680,7 @@ public class RoomPanel extends BasePanel {
        @Override
        public void cleanup(IPartialPageRequestHandler handler) {
                if (eventDetail instanceof EventDetailDialog) {
-                       ((EventDetailDialog)eventDetail).close(handler, null);
+                       ((EventDetailDialog)eventDetail).close(handler);
                }
                handler.add(getBasePage().getHeader().setVisible(true), 
getMainPanel().getTopControls().setVisible(true));
                if (r.isHidden(RoomElement.Chat)) {
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js
index da947c8..8208f36 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/activities.js
@@ -85,7 +85,7 @@ var Activities = function() {
                return 'activity-' + id;
        }
        function _action(name, val) {
-               activityAction($('.room-block .container').data('room-id'), 
name, val);
+               activityAction($('.room-block 
.room-container').data('room-id'), name, val);
        }
        function _remove(ids) {
                for (let i = 0; i < ids.length; ++i) {
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/ActionsSubMenu.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/ActionsSubMenu.java
index 148ec6f..28e8bdb 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/ActionsSubMenu.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/ActionsSubMenu.java
@@ -114,7 +114,7 @@ public class ActionsSubMenu implements Serializable {
 
                        @Override
                        public void onClick(AjaxRequestTarget target) {
-                               sipDialer.open(target);
+                               sipDialer.show(target);
                        }
                };
                downloadPngMenuItem = new 
RoomMenuItem(mp.getString("download.png"), mp.getString("download.png")) {
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmButton.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/OmButton.java
similarity index 96%
rename from 
openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmButton.java
rename to 
openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/OmButton.java
index 9075d68..4c1d5c7 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmButton.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/OmButton.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.openmeetings.web.common;
+package org.apache.openmeetings.web.room.menu;
 
 import static org.apache.openmeetings.web.common.BasePanel.EVT_CLICK;
 
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/PollsSubMenu.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/PollsSubMenu.java
index 80879ab..6193708 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/PollsSubMenu.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/PollsSubMenu.java
@@ -119,7 +119,7 @@ public class PollsSubMenu implements Serializable {
                        @Override
                        public void onClick(AjaxRequestTarget target) {
                                createPoll.updateModel(target);
-                               createPoll.open(target);
+                               createPoll.show(target);
                        }
                };
                pollVoteMenuItem = new RoomMenuItem(mp.getString("32"), 
mp.getString("1485"), false) {
@@ -130,7 +130,7 @@ public class PollsSubMenu implements Serializable {
                                RoomPoll rp = 
pollDao.getByRoom(room.getRoom().getId());
                                if (rp != null) {
                                        vote.updateModel(target, rp);
-                                       vote.open(target);
+                                       vote.show(target);
                                }
                        }
                };
@@ -140,7 +140,7 @@ public class PollsSubMenu implements Serializable {
                        @Override
                        public void onClick(AjaxRequestTarget target) {
                                pollResults.updateModel(target, 
room.getClient().hasRight(Room.Right.moderator));
-                               pollResults.open(target);
+                               pollResults.show(target);
                        }
                };
                mp.add(quickPollAction);
@@ -172,10 +172,10 @@ public class PollsSubMenu implements Serializable {
                if (rp != null) {
                        vote.updateModel(handler, rp);
                } else {
-                       vote.close(handler, null);
+                       vote.close(handler);
                }
                if (createdBy != null && !getUserId().equals(createdBy)) {
-                       vote.open(handler);
+                       vote.show(handler);
                }
                if (pollResults.isOpened()) {
                        pollResults.updateModel(handler, 
room.getClient().hasRight(Room.Right.moderator));
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 e6408a9..6f875b8 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
@@ -46,7 +46,6 @@ import org.apache.openmeetings.db.util.ws.TextRoomMessage;
 import org.apache.openmeetings.web.app.ClientManager;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.ImagePanel;
-import org.apache.openmeetings.web.common.OmButton;
 import org.apache.openmeetings.web.common.menu.MenuPanel;
 import org.apache.openmeetings.web.common.menu.RoomMenuItem;
 import org.apache.openmeetings.web.room.OmTimerBehavior;
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 ae8f65d..eb31b18 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
@@ -18,10 +18,8 @@
  */
 package org.apache.openmeetings.web.room.menu;
 
-import java.util.Arrays;
-import java.util.List;
-
 import org.apache.openmeetings.db.dao.room.SipDao;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
@@ -31,16 +29,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.ui.widget.dialog.AbstractFormDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxButton;
+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 SipDialerDialog extends AbstractFormDialog<String> {
+public class SipDialerDialog extends Modal<String> {
        private static final long serialVersionUID = 1L;
        private final NotificationPanel feedback = new 
NotificationPanel("feedback");
-       private DialogButton call;
-       private DialogButton close;
        private final Form<String> form = new Form<>("form", Model.of(""));
        private final TextField<String> number = new TextField<>("number", 
Model.of(""));
        private final RoomPanel room;
@@ -48,60 +44,54 @@ public class SipDialerDialog extends 
AbstractFormDialog<String> {
        private SipDao sipDao;
 
        public SipDialerDialog(String id, RoomPanel room) {
-               super(id, "");
+               super(id);
                this.room = room;
+       }
+
+       @Override
+       protected void onInitialize() {
+               header(new ResourceModel("1003"));
+               setCloseOnEscapeKey(false);
+               setBackdrop(Backdrop.STATIC);
+
                AjaxButton ab = new AjaxButton("submit") { //FAKE button so 
"submit-on-enter" works as expected
                        private static final long serialVersionUID = 1L;
 
                        @Override
                        protected void onSubmit(AjaxRequestTarget target) {
-                               SipDialerDialog.this.onSubmit(target, call);
+                               SipDialerDialog.this.onSubmit(target);
                        }
 
                        @Override
                        protected void onError(AjaxRequestTarget target) {
-                               SipDialerDialog.this.onError(target, call);
+                               SipDialerDialog.this.onError(target);
                        }
                };
                form.setDefaultButton(ab);
                add(feedback.setOutputMarkupId(true), form.add(number, ab));
-       }
-
-       @Override
-       protected void onInitialize() {
-               setTitle(new ResourceModel("1003"));
-               call = new DialogButton("call", getString("1448"));
-               close = new DialogButton("close", getString("85"));
-               super.onInitialize();
-       }
-
-       @Override
-       public int getWidth() {
-               return 300;
-       }
-
-       @Override
-       protected List<DialogButton> getButtons() {
-               return Arrays.asList(call, close);
-       }
+               addButton(new BootstrapAjaxButton("button", new 
ResourceModel("1448"), form, Buttons.Type.Outline_Primary) {
+                       private static final long serialVersionUID = 1L;
 
-       @Override
-       public DialogButton getSubmitButton() {
-               return call;
-       }
+                       @Override
+                       protected void onSubmit(AjaxRequestTarget target) {
+                               SipDialerDialog.this.onSubmit(target);
+                       }
 
-       @Override
-       public Form<?> getForm() {
-               return form;
+                       @Override
+                       protected void onError(AjaxRequestTarget target) {
+                               SipDialerDialog.this.onError(target);
+                       }
+               }); // call
+               addButton(OmModalCloseButton.of("85"));
+               super.onInitialize();
        }
 
-       @Override
-       protected void onError(AjaxRequestTarget target, DialogButton btn) {
+       protected void onError(AjaxRequestTarget target) {
                target.add(feedback);
        }
 
-       @Override
-       protected void onSubmit(AjaxRequestTarget target, DialogButton btn) {
+       protected void onSubmit(AjaxRequestTarget target) {
                sipDao.joinToConfCall(number.getModelObject(), room.getRoom());
+               // close ?
        }
 }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.html
index 2f4e057..b382aeb 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.html
@@ -20,7 +20,7 @@
 -->
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org";>
-<wicket:panel>
+<wicket:extend>
        <form wicket:id="form">
                <table>
                        <tr>
@@ -44,5 +44,5 @@
                </table>
                <div wicket:id="feedback"></div>
        </form>
-</wicket:panel>
+</wicket:extend>
 </html>
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 8914cf5..61391d7 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
@@ -22,7 +22,6 @@ 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.List;
 
 import org.apache.openmeetings.db.dao.room.PollDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
@@ -31,6 +30,7 @@ import org.apache.openmeetings.db.entity.room.RoomPoll;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.util.ws.RoomMessage;
 import org.apache.openmeetings.web.common.MainPanel;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.form.ChoiceRenderer;
 import org.apache.wicket.markup.html.form.DropDownChoice;
@@ -42,17 +42,15 @@ 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.ui.widget.dialog.AbstractFormDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxButton;
+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 CreatePollDialog extends AbstractFormDialog<RoomPoll> {
+public class CreatePollDialog extends Modal<RoomPoll> {
        private static final long serialVersionUID = 1L;
-       private DialogButton create;
-       private DialogButton cancel;
        private final Long roomId;
-       private final PollForm form;
+       private PollForm form;
        private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        @SpringBean
        private RoomDao roomDao;
@@ -62,16 +60,34 @@ public class CreatePollDialog extends 
AbstractFormDialog<RoomPoll> {
        private PollDao pollDao;
 
        public CreatePollDialog(String id, Long roomId) {
-               super(id, "", new CompoundPropertyModel<>(new RoomPoll()));
+               super(id, new CompoundPropertyModel<>(new RoomPoll()));
                this.roomId = roomId;
-               add(form = new PollForm("form", getModel()));
        }
 
        @Override
        protected void onInitialize() {
-               getTitle().setObject(getString("18"));
-               create = new DialogButton("create", getString("22"));
-               cancel = new DialogButton("cancel", getString("lbl.cancel"));
+               header(new ResourceModel("18"));
+               setCloseOnEscapeKey(false);
+               setBackdrop(Backdrop.STATIC);
+
+               add(form = new PollForm("form", getModel()));
+               addButton(new BootstrapAjaxButton("button", new 
ResourceModel("22"), form, Buttons.Type.Outline_Primary) {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       protected void onSubmit(AjaxRequestTarget target) {
+                               pollDao.close(roomId);
+                               pollDao.update(form.getModelObject());
+                               sendRoom(new RoomMessage(roomId, 
findParent(MainPanel.class).getClient(), RoomMessage.Type.pollCreated));
+                               close(target);
+                       }
+
+                       @Override
+                       protected void onError(AjaxRequestTarget target) {
+                               target.add(feedback);
+                       }
+               }); // create
+               addButton(OmModalCloseButton.of());
                super.onInitialize();
        }
 
@@ -86,33 +102,10 @@ public class CreatePollDialog extends 
AbstractFormDialog<RoomPoll> {
                target.add(form);
        }
 
-       @Override
-       protected List<DialogButton> getButtons() {
-               return Arrays.asList(create, cancel);
-       }
-
-       @Override
-       public DialogButton getSubmitButton() {
-               return create;
-       }
-
-       @Override
-       public PollForm getForm() {
+       PollForm getForm() {
                return form;
        }
 
-       @Override
-       protected void onError(AjaxRequestTarget target, DialogButton btn) {
-               target.add(feedback);
-       }
-
-       @Override
-       protected void onSubmit(AjaxRequestTarget target, DialogButton btn) {
-               pollDao.close(roomId);
-               pollDao.update(form.getModelObject());
-               sendRoom(new RoomMessage(roomId, 
findParent(MainPanel.class).getClient(), RoomMessage.Type.pollCreated));
-       }
-
        class PollForm extends Form<RoomPoll> {
                private static final long serialVersionUID = 1L;
 
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.html
index 26fc35f..4d04c14 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.html
@@ -20,7 +20,7 @@
 -->
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org";>
-<wicket:panel>
+<wicket:extend>
        <form wicket:id="selForm">
                <table class="w-100">
                        <tr>
@@ -47,7 +47,5 @@
                        </tr>
                </table>
        </form>
-       <div wicket:id="closeConfirm"></div>
-       <div wicket:id="deleteConfirm"></div>
-</wicket:panel>
+</wicket:extend>
 </html>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java
index 4857572..77b8cb8 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java
@@ -20,6 +20,7 @@ package org.apache.openmeetings.web.room.poll;
 
 import static org.apache.openmeetings.core.util.WebSocketHelper.sendRoom;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static 
org.apache.openmeetings.web.common.confirmation.ConfirmableAjaxBorder.newOkCancelDangerConfirm;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -31,6 +32,7 @@ import org.apache.openmeetings.db.entity.room.RoomPoll;
 import org.apache.openmeetings.db.entity.room.RoomPollAnswer;
 import org.apache.openmeetings.db.util.ws.RoomMessage;
 import org.apache.openmeetings.web.common.MainPanel;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
@@ -43,6 +45,7 @@ import org.apache.wicket.markup.html.form.ChoiceRenderer;
 import org.apache.wicket.markup.html.form.DropDownChoice;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.wicketstuff.jqplot.behavior.JqPlotBehavior;
@@ -58,29 +61,25 @@ import org.wicketstuff.jqplot.lib.elements.Highlighter;
 import org.wicketstuff.jqplot.lib.elements.Location;
 import org.wicketstuff.jqplot.lib.elements.RendererOptions;
 
-import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
-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 
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;
+import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesome5IconType;
 
 /**
  * @author solomax
  *
  */
-public class PollResultsDialog extends AbstractDialog<RoomPoll> {
+public class PollResultsDialog extends Modal<RoomPoll> {
        private static final long serialVersionUID = 1L;
        private final WebMarkupContainer chartDiv = new 
WebMarkupContainer("chart");
        private final Long roomId;
-       private final PollSelectForm selForm;
-       private final PollResultsForm dispForm;
-       private DialogButton cancel;
-       private DialogButton close;
-       private DialogButton delete;
-       private DialogButton clone;
+       private PollSelectForm selForm;
+       private PollResultsForm dispForm;
+       private BootstrapAjaxLink<String> close;
+       private BootstrapAjaxLink<String> delete;
+       private BootstrapAjaxLink<String> clone;
        private boolean moderator = false;
-       private MessageDialog closeConfirm;
-       private MessageDialog deleteConfirm;
        private boolean opened = false;
        private final CreatePollDialog createPoll;
        @SpringBean
@@ -89,61 +88,74 @@ public class PollResultsDialog extends 
AbstractDialog<RoomPoll> {
        private UserDao userDao;
 
        public PollResultsDialog(String id, CreatePollDialog createPoll, Long 
_roomId) {
-               super(id, "");
+               super(id);
                this.roomId = _roomId;
                this.createPoll = createPoll;
-               add(selForm = new PollSelectForm("selForm"));
-               add(dispForm = new PollResultsForm("dispForm"));
        }
 
        @Override
        protected void onInitialize() {
-               getTitle().setObject(getString("37"));
-               cancel = new DialogButton("cancel", getString("lbl.cancel"));
-               close = new DialogButton("close", getString("1418"));
-               delete = new DialogButton("delete", getString("1420"));
-               clone = new DialogButton("clone", getString("poll.clone"));
-               add(closeConfirm = new MessageDialog("closeConfirm", 
getString("1418"), getString("1419"), DialogButtons.YES_NO, DialogIcon.WARN) {
+               header(new ResourceModel("37"));
+               setCloseOnEscapeKey(false);
+               setBackdrop(Backdrop.STATIC);
+               setUseCloseHandler(true);
+
+               add(selForm = new PollSelectForm("selForm"));
+               add(dispForm = new PollResultsForm("dispForm"));
+               addButton(OmModalCloseButton.of());
+               addButton(close = new BootstrapAjaxLink<>("button", null, 
Buttons.Type.Outline_Danger, new ResourceModel("1418")) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
-                       public void onClose(IPartialPageRequestHandler handler, 
DialogButton button) {
-                               if(button != null && button.match(YES)) {
-                                       Long id = 
dispForm.getModelObject().getId();
-                                       pollDao.close(roomId);
-                                       selForm.updateModel(handler);
-
-                                       RoomPoll p = pollDao.get(id);
-                                       selForm.select.setModelObject(p);
-                                       dispForm.updateModel(p, true, handler);
-                                       sendRoom(new RoomMessage(roomId, 
findParent(MainPanel.class).getClient(), RoomMessage.Type.pollUpdated));
-                               }
+                       public void onClick(AjaxRequestTarget target) {
+                               Long id = dispForm.getModelObject().getId();
+                               pollDao.close(roomId);
+                               selForm.updateModel(target);
+
+                               RoomPoll p = pollDao.get(id);
+                               selForm.select.setModelObject(p);
+                               dispForm.updateModel(p, true, target);
+                               sendRoom(new RoomMessage(roomId, 
findParent(MainPanel.class).getClient(), RoomMessage.Type.pollUpdated));
+                               close(target);
                        }
                });
-               add(deleteConfirm = new MessageDialog("deleteConfirm", 
getString("1420"), getString("1421"), DialogButtons.YES_NO, DialogIcon.WARN) {
+               
close.setIconType(FontAwesome5IconType.times_s).add(newOkCancelDangerConfirm(this,
 getString("1419")));
+               
close.setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true);
+               addButton(delete = new BootstrapAjaxLink<>("button", null, 
Buttons.Type.Outline_Danger, new ResourceModel("1420")) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
-                       public void onClose(IPartialPageRequestHandler handler, 
DialogButton button) {
-                               if(button != null && button.match(YES)) {
-                                       
pollDao.delete(dispForm.getModelObject());
-                                       selForm.updateModel(handler);
-                                       
dispForm.updateModel(selForm.select.getModelObject(), true, handler);
-                                       sendRoom(new RoomMessage(roomId, 
findParent(MainPanel.class).getClient(), RoomMessage.Type.pollUpdated));
-                               }
+                       public void onClick(AjaxRequestTarget target) {
+                               pollDao.delete(dispForm.getModelObject());
+                               selForm.updateModel(target);
+                               
dispForm.updateModel(selForm.select.getModelObject(), true, target);
+                               sendRoom(new RoomMessage(roomId, 
findParent(MainPanel.class).getClient(), RoomMessage.Type.pollUpdated));
+                               close(target);
                        }
                });
-               super.onInitialize();
-       }
-
-       @Override
-       public int getWidth() {
-               return 500;
-       }
+               
delete.setIconType(FontAwesome5IconType.times_s).add(newOkCancelDangerConfirm(this,
 getString("1421")));
+               
delete.setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true);
+               addButton(clone = new BootstrapAjaxLink<>("button", null, 
Buttons.Type.Outline_Danger, new ResourceModel("poll.clone")) {
+                       private static final long serialVersionUID = 1L;
 
-       @Override
-       protected List<DialogButton> getButtons() {
-               return Arrays.asList(clone, delete, close, cancel);
+                       @Override
+                       public void onClick(AjaxRequestTarget target) {
+                               RoomPoll rp = dispForm.getModelObject();
+                               RoomPoll nrp = new RoomPoll();
+                               nrp.setCreator(userDao.get(getUserId()));
+                               nrp.setName(rp.getName());
+                               nrp.setQuestion(rp.getQuestion());
+                               nrp.setType(rp.getType());
+                               nrp.setRoom(rp.getRoom());
+                               createPoll.setModelObject(nrp);
+                               createPoll.setModelObject(nrp);
+                               target.add(createPoll.getForm());
+                               createPoll.show(target);
+                               close(target);
+                       }
+               });
+               
clone.setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true);
+               super.onInitialize();
        }
 
        public void updateModel(IPartialPageRequestHandler target, boolean 
moderator) {
@@ -198,38 +210,15 @@ public class PollResultsDialog extends 
AbstractDialog<RoomPoll> {
        }
 
        @Override
-       public void onClick(AjaxRequestTarget target, DialogButton button) {
-               if (close.equals(button)) {
-                       closeConfirm.open(target);
-                       return;
-               } else if (delete.equals(button)) {
-                       deleteConfirm.open(target);
-                       return;
-               } else if (moderator && clone.equals(button)) {
-                       RoomPoll rp = dispForm.getModelObject();
-                       RoomPoll nrp = new RoomPoll();
-                       nrp.setCreator(userDao.get(getUserId()));
-                       nrp.setName(rp.getName());
-                       nrp.setQuestion(rp.getQuestion());
-                       nrp.setType(rp.getType());
-                       nrp.setRoom(rp.getRoom());
-                       createPoll.setModelObject(nrp);
-                       createPoll.getForm().setModelObject(nrp);
-                       target.add(createPoll.getForm());
-                       createPoll.open(target);
-               }
-               super.onClick(target, button);
-       }
-
-       @Override
-       protected void onOpen(IPartialPageRequestHandler handler) {
-               super.onOpen(handler);
+       public Modal<RoomPoll> show(IPartialPageRequestHandler handler) {
                opened = true;
+               return super.show(handler);
        }
 
        @Override
-       public void onClose(IPartialPageRequestHandler handler, DialogButton 
button) {
+       public void onClose(IPartialPageRequestHandler handler) {
                opened = false;
+               super.onClose(handler);
        }
 
        public boolean isOpened() {
@@ -289,10 +278,15 @@ public class PollResultsDialog extends 
AbstractDialog<RoomPoll> {
 
        private class PollSelectForm extends Form<RoomPoll> {
                private static final long serialVersionUID = 1L;
-               private final DropDownChoice<RoomPoll> select;
+               private DropDownChoice<RoomPoll> select;
 
                PollSelectForm(String id) {
                        super(id);
+               }
+
+               @Override
+               protected void onInitialize() {
+                       super.onInitialize();
                        add((select = new DropDownChoice<>("polls", 
Model.of((RoomPoll)null), new ArrayList<RoomPoll>(), new 
ChoiceRenderer<RoomPoll>() {
                                private static final long serialVersionUID = 1L;
 
@@ -343,11 +337,11 @@ public class PollResultsDialog extends 
AbstractDialog<RoomPoll> {
                PollResultsForm(String id) {
                        super(id, Model.of((RoomPoll)null));
                        setOutputMarkupId(true);
-                       add(chartDiv.setOutputMarkupId(true));
                }
 
                @Override
                protected void onInitialize() {
+                       add(chartDiv.setOutputMarkupId(true));
                        chartSimple = getString("1414");
                        chartPie = getString("1415");
                        add(name, question, count);
@@ -369,9 +363,10 @@ public class PollResultsDialog extends 
AbstractDialog<RoomPoll> {
                        question.setDefaultModelObject(poll == null ? "" : 
poll.getQuestion());
                        count.setDefaultModelObject(poll == null ? 0 : 
poll.getAnswers().size());
                        handler.add(this);
-                       close.setVisible(moderator && (poll != null && 
!poll.isArchived()), handler);
-                       clone.setVisible(moderator && (poll != null && 
poll.isArchived()), handler);
-                       delete.setVisible(moderator, handler);
+                       close.setVisible(moderator && (poll != null && 
!poll.isArchived()));
+                       clone.setVisible(moderator && (poll != null && 
poll.isArchived()));
+                       delete.setVisible(moderator);
+                       handler.add(close, clone, delete);
                        if (redraw) {
                                redraw(handler);
                        }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.html
index 48b38e0..5c294b1 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.html
@@ -20,7 +20,7 @@
 -->
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org";>
-<wicket:panel>
+<wicket:extend>
        <form wicket:id="form">
                <table>
                        <tr>
@@ -46,5 +46,5 @@
                </table>
                <div wicket:id="feedback"></div>
        </form>
-</wicket:panel>
+</wicket:extend>
 </html>
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 dd60495..220a8cb 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
@@ -32,6 +32,7 @@ import org.apache.openmeetings.db.entity.room.RoomPollAnswer;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.util.ws.RoomMessage;
 import org.apache.openmeetings.web.common.MainPanel;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
@@ -44,23 +45,22 @@ import org.apache.wicket.markup.html.form.RadioGroup;
 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.spring.injection.annot.SpringBean;
 
-import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxButton;
+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;
 
 /**
  * @author solomax
  *
  */
-public class VoteDialog extends AbstractFormDialog<RoomPollAnswer> {
+public class VoteDialog extends Modal<RoomPollAnswer> {
        private static final long serialVersionUID = 1L;
        private static final List<Integer> answers = Arrays.asList(1, 2, 3, 4, 
5, 6, 7, 8, 9, 10);
        private PollAnswerForm form;
-       private DialogButton vote;
-       private DialogButton cancel;
        private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        private final IModel<String> user = Model.of((String)null);
        @SpringBean
@@ -69,15 +69,38 @@ public class VoteDialog extends 
AbstractFormDialog<RoomPollAnswer> {
        private PollDao pollDao;
 
        public VoteDialog(String id) {
-               super(id, "");
+               super(id);
        }
 
        @Override
        protected void onInitialize() {
-               getTitle().setObject(getString("18"));
+               header(new ResourceModel("18"));
+               setCloseOnEscapeKey(false);
+               setBackdrop(Backdrop.STATIC);
+
                add(form = new PollAnswerForm("form", new 
CompoundPropertyModel<>(new RoomPollAnswer())));
-               vote = new DialogButton("vote", getString("32"));
-               cancel = new DialogButton("cancel", getString("lbl.cancel"));
+               addButton(new BootstrapAjaxButton("button", new 
ResourceModel("32"), form, Buttons.Type.Outline_Primary) {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       protected void onSubmit(AjaxRequestTarget target) {
+                               RoomPollAnswer a = form.getModelObject();
+                               Long roomId = a.getRoomPoll().getRoom().getId();
+                               if (pollDao.notVoted(roomId, getUserId())) {
+                                       a.setVoteDate(new Date());
+                                       a.getRoomPoll().getAnswers().add(a);
+                                       pollDao.update(a.getRoomPoll());
+                               }
+                               sendRoom(new RoomMessage(roomId, 
findParent(MainPanel.class).getClient(), RoomMessage.Type.pollUpdated));
+                               close(target);
+                       }
+
+                       @Override
+                       protected void onError(AjaxRequestTarget target) {
+                               target.add(feedback);
+                       }
+               }); // vote
+               addButton(OmModalCloseButton.of());
                super.onInitialize();
        }
 
@@ -99,50 +122,6 @@ public class VoteDialog extends 
AbstractFormDialog<RoomPollAnswer> {
        }
 
        @Override
-       protected List<DialogButton> getButtons() {
-               return Arrays.asList(vote, cancel);
-       }
-
-       /* (non-Javadoc)
-        * @see 
com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog#getSubmitButton()
-        */
-       @Override
-       public DialogButton getSubmitButton() {
-               return vote;
-       }
-
-       /* (non-Javadoc)
-        * @see 
com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog#getForm()
-        */
-       @Override
-       public PollAnswerForm getForm() {
-               return form;
-       }
-
-       /* (non-Javadoc)
-        * @see 
com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog#onError(org.apache.wicket.ajax.AjaxRequestTarget)
-        */
-       @Override
-       protected void onError(AjaxRequestTarget target, DialogButton btn) {
-               target.add(feedback);
-       }
-
-       /* (non-Javadoc)
-        * @see 
com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog#onSubmit(org.apache.wicket.ajax.AjaxRequestTarget)
-        */
-       @Override
-       protected void onSubmit(AjaxRequestTarget target, DialogButton btn) {
-               RoomPollAnswer a = form.getModelObject();
-               Long roomId = a.getRoomPoll().getRoom().getId();
-               if (pollDao.notVoted(roomId, getUserId())) {
-                       a.setVoteDate(new Date());
-                       a.getRoomPoll().getAnswers().add(a);
-                       pollDao.update(a.getRoomPoll());
-               }
-               sendRoom(new RoomMessage(roomId, 
findParent(MainPanel.class).getClient(), RoomMessage.Type.pollUpdated));
-       }
-
-       @Override
        protected void onDetach() {
                user.detach();
                super.onDetach();
@@ -155,6 +134,11 @@ public class VoteDialog extends 
AbstractFormDialog<RoomPollAnswer> {
 
                PollAnswerForm(String id, IModel<RoomPollAnswer> model) {
                        super(id, model);
+               }
+
+               @Override
+               protected void onInitialize() {
+                       super.onInitialize();
                        add(feedback.setOutputMarkupId(true));
                        add(new Label("user", user));
                        add(new Label("roomPoll.question"));
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-room.js 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-room.js
index e541e8c..264be6a 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-room.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-room.js
@@ -6,38 +6,25 @@ var Room = (function() {
        function _init(_options) {
                options = _options;
                window.WbArea = options.interview ? InterviewWbArea() : 
DrawWbArea();
-               const menu = $('.room-block .container .menu');
+               const menu = $('.room-block .room-container .menu');
                activities = $('#activities');
                sb = $('.room-block .sidebar');
-               _sbAddResizable();
-               dock = sb.find('.btn-dock').button({
-                       icon: "ui-icon icon-undock"
-                       , showLabel: false
-               }).click(function() {
+               dock = sb.find('.btn-dock').click(function() {
                        const offset = parseInt(sb.css(sbSide));
                        if (offset < 0) {
                                sb.removeClass('closed');
                        }
-                       dock.button('option', 'disabled', true);
+                       dock.prop('disabled', true);
                        const props = {};
                        props[sbSide] = offset < 0 ? '0px' : (-sb.width() + 45) 
+ 'px';
                        sb.animate(props, 1500
                                , function() {
-                                       dock.button('option', 'disabled', false)
-                                               .button('option', 'icon', 
'ui-icon ' + (offset < 0 ? 'icon-undock' : 'icon-dock'));
-                                       if (offset < 0) {
-                                               dock.attr('title', 
dock.data('ttl-undock'));
-                                               _sbAddResizable();
-                                       } else {
-                                               dock.attr('title', 
dock.data('ttl-dock'));
-                                               
sb.addClass('closed').resizable('destroy');
-                                       }
+                                       dock.prop('disabled', false);
+                                       __dockSetMode(offset < 0);
                                        _setSize();
                                });
                });
-               dock.addClass(Settings.isRtl ? 'align-left' : 
'align-right').attr('title', dock.data('ttl-undock'))
-                       .button('option', 'label', dock.data('ttl-undock'))
-                       .button('refresh');
+               __dockSetMode(true);
                menuHeight = menu.length === 0 ? 0 : menu.height();
                VideoManager.init();
                if (typeof(Activities) !== 'undefined') {
@@ -46,6 +33,20 @@ var Room = (function() {
                Sharer.init();
                _setSize();
        }
+       function __dockSetMode(mode) {
+               const icon = dock.find('i').removeClass('icon-dock 
icon-undock');
+               if (mode) {
+                       icon.addClass('icon-undock');
+                       dock.attr('title', dock.data('ttl-undock'))
+                               .find('.sr-only').text(dock.data('ttl-undock'));
+                       _sbAddResizable();
+               } else {
+                       icon.addClass('icon-dock');
+                       dock.attr('title', dock.data('ttl-dock'))
+                               .find('.sr-only').text(dock.data('ttl-dock'));
+                       sb.addClass('closed').resizable('destroy');
+               }
+       }
        function _getSelfAudioClient() {
                const vw = $('#video' + Room.getOptions().uid);
                if (vw.length > 0) {
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
index 8b64046..efd00d1 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
@@ -128,7 +128,7 @@ var VideoManager = (function() {
        function _init() {
                Wicket.Event.subscribe('/websocket/message', _onWsMessage);
                VideoSettings.init(Room.getOptions());
-               share = $('.room-block 
.container').find('.icon.shared.ui-button');
+               share = $('.room-block 
.room-container').find('.icon.shared.ui-button');
                inited = true;
        }
        function _update(c) {
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
index 36689ad..191573c 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
@@ -143,7 +143,7 @@ var VideoUtil = (function() {
                const perm = $('#ask-permission');
                if (undefined === perm.dialog('instance')) {
                        perm.data('callbacks', []).dialog({
-                               appendTo: '.room-block .container'
+                               appendTo: '.room-block .room-container'
                                , autoOpen: true
                                , buttons: [
                                        {
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
index 379b726..c320399 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
@@ -251,7 +251,7 @@ var Video = (function() {
                        area.append($('<div class="pod"></div>').attr('id', 
contId));
                        WbArea.updateAreaClass();
                } else {
-                       contSel = '.room-block .container';
+                       contSel = '.room-block .room-container';
                }
                $(contSel).append(OmUtil.tmpl('#user-video', _id)
                                .attr('title', name)
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.html
index 278c558..3333f15 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.html
@@ -22,31 +22,38 @@
 <wicket:panel>
        <div id="busy-indicator"></div>
        <div class="tabs" id="room-sidebar-tabs">
-               <ul>
-                       <li>
-                               <a href="#room-sidebar-tab-users" 
class="om-icon big tab user" wicket:message="title:398">
-                                       <span class="label"><wicket:message 
key="398"/>&nbsp;</span><span wicket:id="user-count" class="badge">42</span>
+               <ul class="nav nav-tabs" role="tablist">
+                       <li class="nav-item">
+                               <a href="#room-sidebar-tab-users" 
class="nav-link active om-icon big tab user" id="room-sidebar-users-tab" 
data-toggle="tab" role="tab" aria-controls="room-sidebar-tab-users" 
wicket:message="title:398">
+                                       <i class="fas fa-users"></i>
+                                       <span class="label"><wicket:message 
key="398"/>&nbsp;</span><span wicket:id="user-count" class="badge 
badge-info">42</span>
                                </a>
                        </li>
-                       <li wicket:enclosure="file-tab">
-                               <a href="#room-sidebar-tab-files" 
class="om-icon big tab file" wicket:message="title:245" wicket:id="file-tab">
+                       <li class="nav-item" wicket:enclosure="file-tab">
+                               <a href="#room-sidebar-tab-files" 
class="nav-link om-icon big tab file" id="room-sidebar-files-tab" 
data-toggle="tab" role="tab" aria-controls="room-sidebar-tab-files" 
wicket:message="title:245" wicket:id="file-tab">
+                                       <i class="fas fa-folder"></i>
                                        <span class="label"><wicket:message 
key="245"/></span>
                                </a>
                        </li>
-                       <li class="btn-dock" 
wicket:message="data-ttl-dock:label.dock.panel,data-ttl-undock:label.undock.panel"></li>
+                       <li class="btn-dock btn btn-outline-secondary" 
wicket:message="data-ttl-dock:label.dock.panel,data-ttl-undock:label.undock.panel">
+                               <i class="fas"></i>
+                               <span class="sr-only"></span>
+                       </li>
                </ul>
-               <div id="room-sidebar-tab-users">
-                       <div wicket:id="icons" class="header"></div>
-                       <div class="user-list clear"> <!-- auto-scrollable -->
-                               <div wicket:id="user-list"> <!-- content -->
-                                       <div wicket:id="user" class="user entry 
ui-corner-all ui-widget-content">
-                                               <div wicket:id="user"></div>
+               <div class="tab-content">
+                       <div id="room-sidebar-tab-users" class="tab-pane fade 
show active" role="tabpanel" aria-labelledby="room-sidebar-users-tab">
+                               <div wicket:id="icons" class="header"></div>
+                               <div class="user-list clear"> <!-- 
auto-scrollable -->
+                                       <div wicket:id="user-list"> <!-- 
content -->
+                                               <div wicket:id="user" 
class="user entry ui-corner-all ui-widget-content">
+                                                       <div 
wicket:id="user"></div>
+                                               </div>
                                        </div>
                                </div>
                        </div>
-               </div>
-               <div id="room-sidebar-tab-files" wicket:enclosure="tree">
-                       <div class="file-list h-100" wicket:id="tree"></div>
+                       <div id="room-sidebar-tab-files" class="tab-pane fade" 
role="tabpanel" aria-labelledby="room-sidebar-files-tab" 
wicket:enclosure="tree">
+                               <div class="file-list h-100" 
wicket:id="tree"></div>
+                       </div>
                </div>
        </div>
        <div wicket:id="activities"></div>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
index b2d9b56..249f12f 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
@@ -65,7 +65,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.github.openjson.JSONObject;
-import com.googlecode.wicket.jquery.ui.JQueryUIBehavior;
 
 public class RoomSidebar extends Panel {
        private static final long serialVersionUID = 1L;
@@ -182,7 +181,6 @@ public class RoomSidebar extends Panel {
                });
                add(upload = new UploadDialog("upload", room, roomFiles));
                updateShowFiles(null);
-               add(new JQueryUIBehavior("#room-sidebar-tabs", "tabs"));
                add(activities = new ActivitiesPanel("activities", room));
        }
 
@@ -225,7 +223,7 @@ public class RoomSidebar extends Panel {
        }
 
        public void setFilesActive(IPartialPageRequestHandler handler) {
-               
handler.appendJavaScript("$('#room-sidebar-tabs').tabs('option', 'active', 
1);");
+               
handler.appendJavaScript("$('#room-sidebar-files-tab').tab('show');");
        }
 
        public void addActivity(Activity a, IPartialPageRequestHandler handler) 
{
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 8ca54c4..c147201 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
@@ -33,6 +33,7 @@ import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.openmeetings.util.process.ProcessResult;
 import org.apache.openmeetings.util.process.ProcessResultList;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.openmeetings.web.util.ThreadHelper;
 import org.apache.openmeetings.web.util.upload.BootstrapFileUploadBehavior;
@@ -63,7 +64,6 @@ 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.components.progress.UpdatableProgressBar;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
-import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.utilities.BackgroundColorBehavior;
 import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.spinner.SpinnerAjaxButton;
 
@@ -149,6 +149,7 @@ public class UploadDialog extends Modal<String> {
        @Override
        protected void onInitialize() {
                header(new ResourceModel("upload.dlg.choose.title"));
+               setCloseOnEscapeKey(false);
                setBackdrop(Backdrop.STATIC);
 
                
add(form.setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true));
@@ -206,7 +207,7 @@ public class UploadDialog extends Modal<String> {
                        }
                });
                upload.setEnabled(false);
-               addButton(new ModalCloseButton(new 
ResourceModel("85")).type(Buttons.Type.Outline_Secondary));
+               addButton(OmModalCloseButton.of("85"));
 
                
progressBar.updateInterval(Duration.ofSeconds(1)).stop(null).striped(false);
                
add(progressBar.setOutputMarkupPlaceholderTag(true).setVisible(false));
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 d4642a6..69666c8 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
@@ -38,8 +38,6 @@ public class AboutDialog extends Modal<String> {
        @Override
        protected void onInitialize() {
                header(new ResourceModel("1549"));
-               setCloseOnEscapeKey(true);
-               setBackdrop(Backdrop.STATIC);
                super.onInitialize();
                add(new Label("name", getApplicationName()));
                add(new Label("version", getVersion()));
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.java
index cd71431..47f1d99 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.java
@@ -22,6 +22,7 @@ import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.html.form.CheckBox;
@@ -34,7 +35,6 @@ import org.apache.wicket.spring.injection.annot.SpringBean;
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxButton;
 import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
-import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 
 public class InviteUserMessageDialog extends Modal<String> {
        private static final long serialVersionUID = 1L;
@@ -53,8 +53,6 @@ public class InviteUserMessageDialog extends Modal<String> {
        @Override
        protected void onInitialize() {
                header(new ResourceModel("1138"));
-               setCloseOnEscapeKey(true);
-               setBackdrop(Backdrop.STATIC);
 
                addButton(new BootstrapAjaxButton("button", new 
ResourceModel("213"), form, Buttons.Type.Outline_Primary) {
                        private static final long serialVersionUID = 1L;
@@ -69,7 +67,7 @@ public class InviteUserMessageDialog extends Modal<String> {
                                InviteUserMessageDialog.this.close(target);
                        }
                }); //send
-               addButton(new ModalCloseButton(new 
ResourceModel("lbl.cancel")).type(Buttons.Type.Outline_Secondary));
+               addButton(OmModalCloseButton.of());
                super.onInitialize();
                add(form.add(message.setRequired(true), 
enterRoom.setOutputMarkupId(true)).setOutputMarkupId(true));
        }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.java
index 2d27d6c..4dba760 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.java
@@ -27,15 +27,14 @@ import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.user.GroupUser;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.openmeetings.web.user.rooms.RoomListPanel;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
-import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
-import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 
 public class InviteUserToRoomDialog extends Modal<String> {
        private static final long serialVersionUID = 1L;
@@ -68,10 +67,8 @@ public class InviteUserToRoomDialog extends Modal<String> {
        @Override
        protected void onInitialize() {
                header(new ResourceModel("1131"));
-               setCloseOnEscapeKey(true);
-               setBackdrop(Backdrop.STATIC);
 
-               addButton(new ModalCloseButton(new 
ResourceModel("lbl.cancel")).type(Buttons.Type.Outline_Secondary));
+               addButton(OmModalCloseButton.of());
                add(publicRooms = new InviteRoomListPanel("publicRooms", new 
ArrayList<Room>(), getString("1135")));
                add(privateRooms = new InviteRoomListPanel("privateRooms", new 
ArrayList<Room>(), getString("1135")));
                add(inviteMsg);
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 79f3cb8..d60a6ea 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
@@ -54,6 +54,7 @@ import org.apache.openmeetings.util.CalendarHelper;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.OmDateTimePicker;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.openmeetings.web.user.calendar.AppointmentDialog;
 import org.apache.openmeetings.web.util.CalendarWebHelper;
 import org.apache.openmeetings.web.util.RoomTypeDropDown;
@@ -78,7 +79,6 @@ import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxButt
 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;
-import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 
 public class MessageDialog extends Modal<PrivateMessage> {
        private static final long serialVersionUID = 1L;
@@ -113,9 +113,7 @@ public class MessageDialog extends Modal<PrivateMessage> {
        @Override
        protected void onInitialize() {
                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.Outline_Primary) {
@@ -209,7 +207,7 @@ public class MessageDialog extends Modal<PrivateMessage> {
                                onSend(target);
                        }
                }); // send
-               addButton(new ModalCloseButton(new 
ResourceModel("lbl.cancel")).type(Buttons.Type.Outline_Secondary));
+               addButton(OmModalCloseButton.of());
 
                form.add(feedback.setOutputMarkupId(true));
                form.add(new UserMultiChoice("to", modelTo).setRequired(true));
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 7d96cf0..bb6716e 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
@@ -21,6 +21,7 @@ package org.apache.openmeetings.web.user;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 
 import org.apache.openmeetings.db.dao.user.UserContactDao;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.openmeetings.web.user.profile.UserProfilePanel;
 import org.apache.openmeetings.web.util.ContactsHelper;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -33,7 +34,6 @@ import org.apache.wicket.spring.injection.annot.SpringBean;
 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;
-import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 
 public class UserInfoDialog extends Modal<String> {
        private static final long serialVersionUID = 1L;
@@ -53,8 +53,6 @@ public class UserInfoDialog extends Modal<String> {
        @Override
        protected void onInitialize() {
                header(new ResourceModel("1235"));
-               setCloseOnEscapeKey(true);
-               setBackdrop(Backdrop.STATIC);
                addButton(contacts = new BootstrapAjaxLink<>("button", 
Model.of(""), Buttons.Type.Outline_Info, new ResourceModel("1186")) {
                        private static final long serialVersionUID = 1L;
 
@@ -71,7 +69,7 @@ public class UserInfoDialog extends Modal<String> {
                                UserInfoDialog.this.close(target);
                        }
                });
-               addButton(new ModalCloseButton(new 
ResourceModel("lbl.cancel")).type(Buttons.Type.Outline_Secondary));
+               addButton(OmModalCloseButton.of());
                add(container.add(new 
WebMarkupContainer("body")).setOutputMarkupId(true));
                super.onInitialize();
        }
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 d0d4176..132e2cb 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
@@ -53,6 +53,7 @@ import 
org.apache.openmeetings.service.calendar.caldav.AppointmentManager;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.GroupChoiceProvider;
 import org.apache.openmeetings.web.common.OmDateTimePicker;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.openmeetings.web.pages.MainPage;
 import org.apache.openmeetings.web.user.OmWysiwygToolbar;
 import org.apache.openmeetings.web.user.rooms.RoomEnterBehavior;
@@ -94,7 +95,6 @@ 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;
-import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 
 public class AppointmentDialog extends Modal<Appointment> {
        private static final long serialVersionUID = 1L;
@@ -139,7 +139,6 @@ public class AppointmentDialog extends Modal<Appointment> {
        @Override
        protected void onInitialize() {
                header(new ResourceModel("815"));
-               setBackdrop(Backdrop.STATIC);
                size(Size.Large);
 
                add(form = new AppointmentForm("appForm", getModel()));
@@ -233,7 +232,7 @@ public class AppointmentDialog extends Modal<Appointment> {
                };
                
delete.setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true);
                addButton(delete.add(newOkCancelDangerConfirm(this, 
getString("833"))));
-               addButton(new ModalCloseButton(new 
ResourceModel("lbl.cancel")).type(Buttons.Type.Outline_Secondary));
+               addButton(OmModalCloseButton.of());
                super.onInitialize();
        }
 
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 7e60bcc..a64c2f6 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
@@ -30,6 +30,7 @@ import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.calendar.OmCalendar;
 import org.apache.openmeetings.service.calendar.caldav.AppointmentManager;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
@@ -55,7 +56,6 @@ 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;
-import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 
 /**
  * Multipurpose Calendar Dialog form. This provides the ability to ask for a 
user prompt,
@@ -97,7 +97,6 @@ public class CalendarDialog extends Modal<OmCalendar> {
        @Override
        protected void onInitialize() {
                header(new ResourceModel("calendar.dialogTitle"));
-               setBackdrop(Backdrop.STATIC);
 
                form = new UserCalendarForm("calform", getModel());
                add(form);
@@ -167,7 +166,7 @@ public class CalendarDialog extends Modal<OmCalendar> {
                };
                
delete.setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true);
                addButton(delete.add(newOkCancelDangerConfirm(this, 
getString("833"))));
-               addButton(new ModalCloseButton(new 
ResourceModel("lbl.cancel")).type(Buttons.Type.Outline_Secondary));
+               addButton(OmModalCloseButton.of());
                super.onInitialize();
        }
 
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 3d95fbf..ccc2ce2 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
@@ -75,7 +75,7 @@ var Chat = function() {
        }
        function doneTyping () {
                typingTimer = null;
-               chatActivity('typing_stop', $('.room-block 
.container').data('room-id'));
+               chatActivity('typing_stop', $('.room-block 
.room-container').data('room-id'));
        }
        function _emtClick() {
                _editorAppend($(this).data('emt'));
@@ -182,7 +182,7 @@ var Chat = function() {
                }
                ctrl.off('click').click(Chat.toggle);
                $('#chatMessage').off().on('input propertychange paste', 
function () {
-                       const room = $('.room-block .container');
+                       const room = $('.room-block .room-container');
                        if (room.length) {
                                if (!!typingTimer) {
                                        clearTimeout(typingTimer);
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 c305a4d..10acdbc 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
@@ -33,6 +33,7 @@ import org.apache.openmeetings.cli.CleanupUnit;
 import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -44,7 +45,6 @@ import org.apache.wicket.spring.injection.annot.SpringBean;
 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;
-import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.spinner.SpinnerAjaxButton;
 
 public class AdminCleanupInfoDialog extends Modal<String> {
@@ -74,8 +74,7 @@ public class AdminCleanupInfoDialog extends Modal<String> {
                super.onInitialize();
                header(new 
ResourceModel("dashboard.widget.admin.cleanup.title"));
                setCloseOnEscapeKey(true);
-               setBackdrop(Backdrop.STATIC);
-               addButton(new ModalCloseButton(new 
ResourceModel("54")).type(Buttons.Type.Outline_Secondary));
+               addButton(OmModalCloseButton.of("54"));
 
                uploadSize = new Label("upload-size", "");
                profile = new CleanupEntityUnitPanel("profile", 
"dashboard.widget.admin.cleanup.profiles", new CleanupEntityUnit());
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 db82206..ff6aa5d 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
@@ -22,6 +22,7 @@ import static 
org.apache.openmeetings.web.app.WebSession.getUserId;
 
 import org.apache.openmeetings.core.util.StrongPasswordValidator;
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.web.common.OmModalCloseButton;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.PasswordTextField;
@@ -35,7 +36,6 @@ import org.slf4j.LoggerFactory;
 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;
-import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.spinner.SpinnerAjaxButton;
 
 public class ChangePasswordDialog extends Modal<String> {
@@ -78,8 +78,6 @@ public class ChangePasswordDialog extends Modal<String> {
        @Override
        protected void onInitialize() {
                header(new ResourceModel("327"));
-               setCloseOnEscapeKey(true);
-               setBackdrop(Backdrop.STATIC);
 
                addButton(new SpinnerAjaxButton("button", new 
ResourceModel("327"), form, Buttons.Type.Outline_Primary) {
                        private static final long serialVersionUID = 1L;
@@ -100,7 +98,7 @@ public class ChangePasswordDialog extends Modal<String> {
                                }
                        }
                }); //send
-               addButton(new ModalCloseButton(new 
ResourceModel("lbl.cancel")).type(Buttons.Type.Outline_Secondary));
+               addButton(OmModalCloseButton.of());
                passValidator = new 
StrongPasswordValidator(userDao.get(getUserId()));
                add(form.add(
                                current.setLabel(new 
ResourceModel("current.password")).setRequired(true)
diff --git a/openmeetings-web/src/main/webapp/css/raw-room.css 
b/openmeetings-web/src/main/webapp/css/raw-room.css
index 9041164..8eec1e6 100644
--- a/openmeetings-web/src/main/webapp/css/raw-room.css
+++ b/openmeetings-web/src/main/webapp/css/raw-room.css
@@ -1,5 +1,5 @@
 /* Licensed under the Apache License, Version 2.0 (the "License") 
http://www.apache.org/licenses/LICENSE-2.0 */
-.room-block, .room-block .container {
+.room-block, .room-block .room-container {
        width: 100%;
        height: 100%;
 }
@@ -18,6 +18,19 @@
 .ui-icon.status-mod {
        background-image: url(images/status-mod.png);
 }
+.room-block .event-details.modal {
+       position: absolute;
+       width: 300px;
+       height: 300px;
+       top: 30px;
+       right:  0;
+       left: auto;
+       z-index: 3050;
+}
+.room-block .event-details.modal .modal-dialog {
+       padding: 0;
+       margin: 0;
+}
 .room-block .sidebar {
        min-width: 155px;
        width: var(--room-sidebar-width);
@@ -29,6 +42,12 @@
 .room-block .sidebar #room-sidebar-tabs {
        height: calc(100% - var(--buffer-size) - var(--activities-height));
 }
+.room-block .sidebar .tab {
+       padding: 5px 0 0 0;
+}
+.room-block .sidebar .tab i {
+       font-size: 2.2em;
+}
 html[dir="rtl"] .room-block .sidebar {
        right: 0;
        left: auto;
@@ -119,14 +138,14 @@ html[dir="rtl"] .room-block .sidebar {
        background-size: 32px;
 }
 .room-block .sidebar .icon-undock, .room-block .sidebar .icon-dock {
-       width: 16px;
-       height: 16px;
+       font-size: 1.6em;
+       padding-top: 3px;
 }
-.room-block .sidebar .icon-undock {
-       background-image: url(images/double-arrow-left.png);
+.room-block .sidebar .icon-dock:before {
+       content: "\f101";
 }
-.room-block .sidebar .icon-dock {
-       background-image: url(images/double-arrow-right.png);
+.room-block .sidebar .icon-undock::before {
+       content: "\f100";
 }
 .room-block .sidebar #room-sidebar-tab-users
 , .room-block .sidebar #room-sidebar-tab-files
@@ -292,10 +311,15 @@ ul.settings-menu {
        font-weight: bolder;
 }
 .room-block .sidebar .tab.om-icon.big {
-       padding: 0em 1em 0 2.5em;
        line-height: 30px;
        width: auto;
        max-width: 80px;
+       position: relative;
+}
+.room-block .sidebar .tab .badge {
+       position: absolute;
+       bottom: 0;
+       right: 2px;
 }
 .room-block .sidebar .tab.om-icon.big .label {
        max-width: 50px;
@@ -304,11 +328,9 @@ ul.settings-menu {
        overflow: hidden;
        white-space: nowrap;
 }
-.room-block.small .sidebar .tab.user.om-icon.big {
-       max-width: 20px;
-}
 .room-block.small .sidebar .tab.om-icon.big {
-       max-width: 0px;
+       max-width: 40px;
+       width: 40px;
        padding-right: 0;
 }
 .room-block.small .sidebar .tab.om-icon.big .label {
@@ -319,12 +341,6 @@ ul.settings-menu {
 {
        width: 40px;
 }
-.room-block .sidebar .tab.om-icon.big.user {
-       background-image: url(images/group.png);
-}
-.room-block .sidebar .tab.om-icon.big.file {
-       background-image: url(images/folder_explore.png);
-}
 /************ VIDEO **************/
 .ui-dialog.video, .ui-dialog.video .ui-dialog-titlebar, .ui-dialog.video 
.ui-dialog-content {
        padding: 0;
@@ -377,25 +393,25 @@ ul.settings-menu {
 .ui-dialog.video.mic-status .footer {
        display: block;
 }
-.room-block .container .user-video {
+.room-block .room-container .user-video {
        display: inline-block !important;
 }
-.room-block .container .user-video .header {
+.room-block .room-container .user-video .header {
        height: 20px;
        text-overflow: ellipsis;
        white-space: nowrap;
        overflow: hidden;
 }
-.room-block .container .user-video .header .ui-dialog-title {
+.room-block .room-container .user-video .header .ui-dialog-title {
        padding-left: 5px;
 }
-.room-block .container .user-video .video {
+.room-block .room-container .user-video .video {
        min-width: 40px;
        min-height: 30px;
        overflow: hidden;
        position: relative;
 }
-.room-block .container .user-video .video.audio-only {
+.room-block .room-container .user-video .video.audio-only {
        background-repeat: no-repeat;
        background-size: auto 100%;
        background-position: center;
@@ -548,12 +564,15 @@ ul.settings-menu {
        width: 75px;
 }
 #room-sidebar-tabs.tabs .btn-dock {
-       display: block;
+       display: inline-block;
        list-style: none;
        list-style-type: none;
-       float: right;
-       padding: .4em 1em;
+       padding: 0 .5em;
        border-bottom-width: inherit;
+       height: 25px;
+       position: absolute;
+       top: 5px;
+       right: 5px;
 }
 .video .mute-others {
        position: absolute;

Reply via email to