You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2021/07/10 12:03:56 UTC

[openmeetings] branch bootstrap-5 updated (b13bf82 -> 45be7ab)

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

solomax pushed a change to branch bootstrap-5
in repository https://gitbox.apache.org/repos/asf/openmeetings.git.


    from b13bf82  [OPENMEETINGS-2637] initial commit
     add d0b6b66  [OPENMEETINGS-2593] tika, tomcat, postres
     add e3e2402  [OPENMEETINGS-2593] wicket, directory-api
     new 612551b  Merge branch 'master' into bootstrap-5
     new 45be7ab  [OPENMEETINGS-2637] More work on migration

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 openmeetings-server/pom.xml                        |   2 +-
 openmeetings-web/src/main/front/chat/src/chat.js   |   2 +-
 .../openmeetings/web/admin/AdminActionsPanel.java  |   2 +-
 .../web/admin/configurations/ConfigsPanel.html     |   2 +-
 .../web/admin/connection/ConnectionsPanel.html     |   2 +-
 .../web/admin/connection/ConnectionsPanel.java     |   2 +-
 .../openmeetings/web/admin/email/EmailForm.java    |   2 +-
 .../openmeetings/web/admin/email/EmailPanel.html   |   2 +-
 .../openmeetings/web/admin/extra/ExtraPanel.html   |   2 +-
 .../web/admin/groups/GroupUsersPanel.html          |   2 +-
 .../web/admin/groups/GroupUsersPanel.java          |   2 +-
 .../openmeetings/web/admin/groups/GroupsPanel.html |   2 +-
 .../openmeetings/web/admin/labels/LangPanel.html   |   2 +-
 .../openmeetings/web/admin/labels/LangPanel.java   |   2 +-
 .../openmeetings/web/admin/ldaps/LdapsPanel.html   |   2 +-
 .../openmeetings/web/admin/oauth/OAuthForm.java    |   2 +-
 .../openmeetings/web/admin/oauth/OAuthPanel.html   |   4 +-
 .../openmeetings/web/admin/rooms/RoomForm.java     |   2 +-
 .../openmeetings/web/admin/rooms/RoomsPanel.html   |   8 +-
 .../openmeetings/web/admin/users/UsersPanel.html   |   2 +-
 .../openmeetings/web/common/FormActionsPanel.java  |   2 +-
 .../apache/openmeetings/web/common/MainPanel.java  |   2 +-
 .../web/common/UploadableImagePanel.java           |   2 +-
 .../common/confirmation/ConfirmationBehavior.java  | 112 ----
 .../common/confirmation/ConfirmationConfig.java    | 114 ----
 .../common/confirmation/ConfirmationHelper.java    |  44 ++
 .../common/confirmation/bootstrap-confirmation.js  | 596 ---------------------
 .../apache/openmeetings/web/room/NetTestPanel.html |  32 +-
 .../apache/openmeetings/web/room/RoomPanel.html    |   8 +-
 .../openmeetings/web/room/VideoSettings.html       |   2 +-
 .../web/room/activities/ActivitiesPanel.html       |   2 +-
 .../web/room/poll/PollResultsDialog.java           |   2 +-
 .../apache/openmeetings/web/room/raw-nettest.js    |   2 +-
 .../openmeetings/web/room/sidebar/RoomSidebar.html |   8 +-
 .../apache/openmeetings/web/room/wb/WbPanel.html   |  14 +-
 .../openmeetings/web/user/OmWysiwygToolbar.html    |   4 +-
 .../web/user/calendar/AppointmentDialog.html       |   6 +-
 .../web/user/calendar/AppointmentDialog.java       |   2 +-
 .../web/user/calendar/CalendarDialog.java          |   2 +-
 .../openmeetings/web/user/chat/ChatToolbar.html    |  12 +-
 .../openmeetings/web/user/chat/ChatToolbar.java    |   4 +-
 .../web/user/dashboard/RssWidgetView.html          |   4 +-
 .../web/user/dashboard/StartWidgetView.html        |   8 +-
 .../dashboard/admin/AdminCleanupInfoDialog.java    |   2 +-
 .../apache/openmeetings/web/user/dashboard/rss.js  |   2 +-
 .../web/user/profile/InvitationDetails.java        |   2 +-
 .../web/user/profile/InvitationsPanel.html         |   2 +-
 .../web/user/profile/MessagesContactsPanel.java    |   2 +-
 .../web/user/profile/UserSearchPanel.html          |   2 +-
 .../web/user/profile/WidgetsPanel.html             |   2 +-
 .../WEB-INF/classes/META-INF/mysql_persistence.xml |   2 +-
 .../webapp/WEB-INF/classes/openmeetings.properties |   4 +-
 .../src/main/webapp/css/raw-activities.css         |   2 +-
 openmeetings-web/src/main/webapp/css/raw-admin.css |   4 +-
 openmeetings-web/src/main/webapp/css/raw-chat.css  |   2 +-
 .../src/main/webapp/css/raw-general.css            |  11 +-
 openmeetings-web/src/main/webapp/css/raw-menu.css  |   4 +-
 .../src/main/webapp/css/raw-nettest.css            |  20 +-
 openmeetings-web/src/main/webapp/css/raw-room.css  |  58 +-
 openmeetings-web/src/main/webapp/css/raw-tree.css  |  18 +-
 openmeetings-web/src/main/webapp/css/raw-wb.css    |   2 +-
 pom.xml                                            |  10 +-
 62 files changed, 211 insertions(+), 972 deletions(-)
 delete mode 100644 openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationBehavior.java
 delete mode 100644 openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationConfig.java
 create mode 100644 openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationHelper.java
 delete mode 100644 openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/bootstrap-confirmation.js

[openmeetings] 02/02: [OPENMEETINGS-2637] More work on migration

Posted by so...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 45be7abc59cc7da8947329bcde473bf055b5ae0b
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Sat Jul 10 19:03:41 2021 +0700

    [OPENMEETINGS-2637] More work on migration
---
 openmeetings-web/src/main/front/chat/src/chat.js   |   2 +-
 .../openmeetings/web/admin/AdminActionsPanel.java  |   2 +-
 .../web/admin/configurations/ConfigsPanel.html     |   2 +-
 .../web/admin/connection/ConnectionsPanel.html     |   2 +-
 .../web/admin/connection/ConnectionsPanel.java     |   2 +-
 .../openmeetings/web/admin/email/EmailForm.java    |   2 +-
 .../openmeetings/web/admin/email/EmailPanel.html   |   2 +-
 .../openmeetings/web/admin/extra/ExtraPanel.html   |   2 +-
 .../web/admin/groups/GroupUsersPanel.html          |   2 +-
 .../web/admin/groups/GroupUsersPanel.java          |   2 +-
 .../openmeetings/web/admin/groups/GroupsPanel.html |   2 +-
 .../openmeetings/web/admin/labels/LangPanel.html   |   2 +-
 .../openmeetings/web/admin/labels/LangPanel.java   |   2 +-
 .../openmeetings/web/admin/ldaps/LdapsPanel.html   |   2 +-
 .../openmeetings/web/admin/oauth/OAuthForm.java    |   2 +-
 .../openmeetings/web/admin/oauth/OAuthPanel.html   |   4 +-
 .../openmeetings/web/admin/rooms/RoomForm.java     |   2 +-
 .../openmeetings/web/admin/rooms/RoomsPanel.html   |   8 +-
 .../openmeetings/web/admin/users/UsersPanel.html   |   2 +-
 .../openmeetings/web/common/FormActionsPanel.java  |   2 +-
 .../apache/openmeetings/web/common/MainPanel.java  |   2 +-
 .../web/common/UploadableImagePanel.java           |   2 +-
 .../common/confirmation/ConfirmationBehavior.java  | 112 ----
 .../common/confirmation/ConfirmationConfig.java    | 114 ----
 .../common/confirmation/ConfirmationHelper.java    |  44 ++
 .../common/confirmation/bootstrap-confirmation.js  | 596 ---------------------
 .../apache/openmeetings/web/room/NetTestPanel.html |  32 +-
 .../apache/openmeetings/web/room/RoomPanel.html    |   8 +-
 .../openmeetings/web/room/VideoSettings.html       |   2 +-
 .../web/room/activities/ActivitiesPanel.html       |   2 +-
 .../web/room/poll/PollResultsDialog.java           |   2 +-
 .../apache/openmeetings/web/room/raw-nettest.js    |   2 +-
 .../openmeetings/web/room/sidebar/RoomSidebar.html |   8 +-
 .../apache/openmeetings/web/room/wb/WbPanel.html   |  14 +-
 .../openmeetings/web/user/OmWysiwygToolbar.html    |   4 +-
 .../web/user/calendar/AppointmentDialog.html       |   6 +-
 .../web/user/calendar/AppointmentDialog.java       |   2 +-
 .../web/user/calendar/CalendarDialog.java          |   2 +-
 .../openmeetings/web/user/chat/ChatToolbar.html    |  12 +-
 .../openmeetings/web/user/chat/ChatToolbar.java    |   4 +-
 .../web/user/dashboard/RssWidgetView.html          |   4 +-
 .../web/user/dashboard/StartWidgetView.html        |   8 +-
 .../dashboard/admin/AdminCleanupInfoDialog.java    |   2 +-
 .../apache/openmeetings/web/user/dashboard/rss.js  |   2 +-
 .../web/user/profile/InvitationDetails.java        |   2 +-
 .../web/user/profile/InvitationsPanel.html         |   2 +-
 .../web/user/profile/MessagesContactsPanel.java    |   2 +-
 .../web/user/profile/UserSearchPanel.html          |   2 +-
 .../web/user/profile/WidgetsPanel.html             |   2 +-
 .../WEB-INF/classes/META-INF/mysql_persistence.xml |   2 +-
 .../webapp/WEB-INF/classes/openmeetings.properties |   4 +-
 .../src/main/webapp/css/raw-activities.css         |   2 +-
 openmeetings-web/src/main/webapp/css/raw-admin.css |   4 +-
 openmeetings-web/src/main/webapp/css/raw-chat.css  |   2 +-
 .../src/main/webapp/css/raw-general.css            |  11 +-
 openmeetings-web/src/main/webapp/css/raw-menu.css  |   4 +-
 .../src/main/webapp/css/raw-nettest.css            |  20 +-
 openmeetings-web/src/main/webapp/css/raw-room.css  |  58 +-
 openmeetings-web/src/main/webapp/css/raw-tree.css  |  18 +-
 openmeetings-web/src/main/webapp/css/raw-wb.css    |   2 +-
 60 files changed, 205 insertions(+), 966 deletions(-)

diff --git a/openmeetings-web/src/main/front/chat/src/chat.js b/openmeetings-web/src/main/front/chat/src/chat.js
index e5a5086..a9cba60 100644
--- a/openmeetings-web/src/main/front/chat/src/chat.js
+++ b/openmeetings-web/src/main/front/chat/src/chat.js
@@ -214,7 +214,7 @@ function _addTab(id, label) {
 	if (!label) {
 		label = id === "chatTab-all" ? allPrefix : roomPrefix + id.substr(9);
 	}
-	const link = $('<a class="nav-link" data-toggle="tab" role="tab">')
+	const link = $('<a class="nav-link" data-bs-toggle="tab" role="tab">')
 		.attr('aria-controls', id)
 		.attr('href', '#' + id).text(label)
 		, li = $('<li class="nav-item">').append(link);
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminActionsPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminActionsPanel.java
index 68f2cd9..2a1ddad 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminActionsPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminActionsPanel.java
@@ -18,7 +18,7 @@
  */
 package org.apache.openmeetings.web.admin;
 
-import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
+import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
 
 import org.apache.openmeetings.web.common.FormActionsPanel;
 import org.apache.wicket.ajax.AjaxRequestTarget;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.html
index 8f29abd..0e09781 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.html
@@ -23,7 +23,7 @@
 <wicket:extend>
 	<div class="adminPanelColumnTable col-6">
 		<div class="adminNav" wicket:id="navigator">[dataview navigator]</div>
-		<table class="list-table table-striped table-hover">
+		<table class="list-table table table-striped table-hover">
 			<thead>
 				<tr>
 					<th class="col-1"><span wicket:id="orderById"></span><wicket:message key="188" /></th>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.html
index 56fd80e..b42d4c1 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.html
@@ -23,7 +23,7 @@
 <wicket:extend>
 	<div class="adminPanelColumnTable col-6">
 		<div class="adminNav" wicket:id="navigator">[dataview navigator]</div>
-		<table class="list-table table-striped table-hover">
+		<table class="list-table table table-striped table-hover">
 			<thead>
 				<tr>
 					<th class="col-2"><wicket:message key="45" /></th>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
index 9132b84..39160b7 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
@@ -20,7 +20,7 @@ package org.apache.openmeetings.web.admin.connection;
 
 import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
 import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
-import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelConfirm;
+import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelConfirm;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/email/EmailForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/email/EmailForm.java
index 4ea2256..d0c530b 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/email/EmailForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/email/EmailForm.java
@@ -18,7 +18,7 @@
  */
 package org.apache.openmeetings.web.admin.email;
 
-import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
+import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
 
 import org.apache.openmeetings.db.dao.basic.MailMessageDao;
 import org.apache.openmeetings.db.entity.basic.MailMessage;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/email/EmailPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/email/EmailPanel.html
index 18215f0..0e50931 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/email/EmailPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/email/EmailPanel.html
@@ -23,7 +23,7 @@
 <wicket:extend>
 	<div class="adminPanelColumnTable col-6">
 		<div class="adminNav" wicket:id="navigator">[dataview navigator]</div>
-		<table class="list-table table-striped table-hover">
+		<table class="list-table table table-striped table-hover">
 			<thead>
 				<tr>
 					<th class="col-1"><span wicket:id="orderById"></span><wicket:message key="188" /></th>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/extra/ExtraPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/extra/ExtraPanel.html
index ede1f9d..0129cd6 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/extra/ExtraPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/extra/ExtraPanel.html
@@ -23,7 +23,7 @@
 <wicket:extend>
 	<div class="adminPanelColumnTable col-6">
 		<div class="adminNav" wicket:id="navigator">[dataview navigator]</div>
-		<table class="list-table table-striped table-hover">
+		<table class="list-table table table-striped table-hover">
 			<thead>
 				<tr>
 					<th class="col-1"><span wicket:id="orderById"></span><wicket:message key="188" /></th>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html
index b6c8dc6..3532dcc 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html
@@ -22,7 +22,7 @@
 <wicket:panel>
 	<div class="usergroupspanel">
 		<div class="adminNav" wicket:id="navigator">[dataview navigator]</div>
-		<table class="list-table small table-striped table-hover">
+		<table class="list-table small table table-striped table-hover">
 			<thead>
 				<tr>
 					<th class="col-1" wicket:message="title:98"><wicket:message key="98" /></th>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java
index 10a7605..9c5e899 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java
@@ -18,7 +18,7 @@
  */
 package org.apache.openmeetings.web.admin.groups;
 
-import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
+import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html
index 12a5218..8ba3630 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html
@@ -23,7 +23,7 @@
 <wicket:extend>
 	<div class="adminPanelColumnTable col-6">
 		<div class="adminNav" wicket:id="navigator">[dataview navigator]</div>
-		<table class="list-table table-striped table-hover">
+		<table class="list-table table table-striped table-hover">
 			<thead>
 				<tr>
 					<th class="col-1"><span wicket:id="orderById"></span><wicket:message key="188" /></th>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.html
index f833b68..263b1c8 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.html
@@ -38,7 +38,7 @@
 			</div>
 		</form>
 		<div class="adminNav" wicket:id="navigator">[dataview navigator]</div>
-		<table class="list-table table-striped table-hover">
+		<table class="list-table table table-striped table-hover">
 			<thead>
 				<tr>
 					<th class="col-6"><span wicket:id="orderByName"></span><wicket:message key="165" /></th>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.java
index 93cde50..2219359 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.java
@@ -20,7 +20,7 @@ package org.apache.openmeetings.web.admin.labels;
 
 import static java.time.Duration.ZERO;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
-import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
+import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
 import static org.apache.wicket.request.resource.ContentDisposition.ATTACHMENT;
 
 import java.io.IOException;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.html
index 479f70c..6b0baed 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.html
@@ -23,7 +23,7 @@
 <wicket:extend>
 	<div class="adminPanelColumnTable col-6">
 		<div class="adminNav" wicket:id="navigator">[dataview navigator]</div>
-		<table class="list-table table-striped table-hover">
+		<table class="list-table table table-striped table-hover">
 			<thead>
 				<tr>
 					<th class="col-1"><span wicket:id="orderById"></span><wicket:message key="188" /></th>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java
index 63a724a..a04da13 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java
@@ -20,7 +20,7 @@ package org.apache.openmeetings.web.admin.oauth;
 
 import static org.apache.openmeetings.web.app.UserManager.getRedirectUri;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
+import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
 
 import java.util.AbstractMap.SimpleEntry;
 import java.util.ArrayList;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthPanel.html
index 60c008e..fa67bc3 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthPanel.html
@@ -23,7 +23,7 @@
 <wicket:extend>
 	<div class="adminPanelColumnTable col-6">
 		<div class="adminNav" wicket:id="navigator">[dataview navigator]</div>
-		<table class="list-table table-striped table-hover">
+		<table class="list-table table table-striped table-hover">
 			<thead>
 				<tr>
 					<th class="col-1"><span wicket:id="orderById"></span><wicket:message key="188" /></th>
@@ -110,7 +110,7 @@
 							<button type="button" wicket:id="addMapping"></button>
 						</div>
 					</div>
-					<table class="list-table small table-striped table-hover">
+					<table class="list-table small table table-striped table-hover">
 						<thead>
 							<tr>
 								<th class="col-7"><wicket:message key="admin.oauth.attr.om" /></th>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
index b93776d..6048d49 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
@@ -25,7 +25,7 @@ import static org.apache.openmeetings.web.app.Application.kickUser;
 import static org.apache.openmeetings.web.app.WebSession.getRights;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 import static org.apache.openmeetings.web.common.BasePanel.EVT_CHANGE;
-import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
+import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
 import static org.apache.wicket.validation.validator.StringValidator.maximumLength;
 
 import java.util.ArrayList;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
index 11b87f2..2972a75 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
@@ -23,7 +23,7 @@
 <wicket:extend>
 	<div class="adminPanelColumnTable rooms col-6">
 		<div class="adminNav" wicket:id="navigator">[dataview navigator]</div>
-		<table class="list-table table-striped table-hover">
+		<table class="list-table table table-striped table-hover">
 			<thead>
 				<tr>
 					<th class="col-1"><span wicket:id="orderById"></span><wicket:message key="188" /></th>
@@ -191,7 +191,7 @@
 							<button type="button" wicket:id="addFiles"></button>
 						</div>
 					</div>
-					<table class="list-table small table-striped table-hover">
+					<table class="list-table small table table-striped table-hover">
 						<thead>
 							<tr>
 								<th class="col-9"><wicket:message key="165" /></th>
@@ -214,7 +214,7 @@
 				<!-- Users in this Room -->
 				<fieldset>
 					<legend><wicket:message key="407" /></legend>
-					<table class="list-table small table-striped table-hover">
+					<table class="list-table small table table-striped table-hover">
 						<thead>
 							<tr>
 								<th class="col-1"><wicket:message key="188" /></th>
@@ -258,7 +258,7 @@
 						<div class="om-select2 p-0 d-inline-block col-8"><select wicket:id="moderator2add" class="input w-100"></select></div>
 					</div>
 					<div class="formelement" wicket:id="moderatorContainer">
-						<table class="list-table small table-striped table-hover">
+						<table class="list-table small table table-striped table-hover">
 							<thead>
 								<tr>
 									<th class="col-1 overflow-hidden" wicket:message="title:817"><wicket:message key="817" /></th>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UsersPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UsersPanel.html
index ef56e1b..1e55600 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UsersPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UsersPanel.html
@@ -23,7 +23,7 @@
 <wicket:extend>
 	<div class="adminPanelColumnTable col-6">
 		<div class="adminNav" wicket:id="navigator">[dataview navigator]</div>
-		<table class="list-table table-striped table-hover">
+		<table class="list-table table table-striped table-hover">
 			<thead>
 				<tr>
 					<th class="col-1"><span wicket:id="orderById"></span> <wicket:message key="188" /></th>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/FormActionsPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/FormActionsPanel.java
index abd9863..d78f22a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/FormActionsPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/FormActionsPanel.java
@@ -18,7 +18,7 @@
  */
 package org.apache.openmeetings.web.common;
 
-import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
+import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
 
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
index 76e636c..de66cf5 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
@@ -23,7 +23,7 @@ import static org.apache.openmeetings.db.util.AuthLevelUtil.hasGroupAdminLevel;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.PARAM_USER_ID;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.isMyRoomsEnabled;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelConfirm;
+import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelConfirm;
 import static org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
 import static org.apache.openmeetings.web.util.CallbackFunctionHelper.getParam;
 import static org.apache.openmeetings.web.util.OmUrlFragment.CHILD_ID;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/UploadableImagePanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/UploadableImagePanel.java
index 26aab2e..0ec1d92 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/UploadableImagePanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/UploadableImagePanel.java
@@ -19,7 +19,7 @@
 package org.apache.openmeetings.web.common;
 
 import static org.apache.openmeetings.util.OpenmeetingsVariables.getMaxUploadSize;
-import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelConfirm;
+import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelConfirm;
 
 import java.io.File;
 import java.util.Optional;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationBehavior.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationBehavior.java
deleted file mode 100644
index 5b0864f..0000000
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationBehavior.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.common.confirmation;
-
-import static de.agilecoders.wicket.jquery.JQuery.$;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.JavaScriptHeaderItem;
-import org.apache.wicket.resource.JQueryPluginResourceReference;
-import org.apache.wicket.util.lang.Args;
-
-import de.agilecoders.wicket.core.markup.html.bootstrap.behavior.BootstrapJavascriptBehavior;
-import de.agilecoders.wicket.core.util.References;
-
-/**
- * A behavior that shows a popover with OK/Cancel buttons to confirm an action.
- *
- * @since 0.9.12
- */
-public class ConfirmationBehavior extends BootstrapJavascriptBehavior {
-	/** serialVersionUID. */
-	private static final long serialVersionUID = 1L;
-	/** Configuration. */
-	private final ConfirmationConfig config;
-	/**
-	 * Jquery Selector (if you don't want to use the one of the component for
-	 * singleton for example).
-	 */
-	private final String selector;
-
-	/**
-	 * Constructor that uses the default configuration
-	 */
-	public ConfirmationBehavior() {
-		this(null, new ConfirmationConfig());
-	}
-
-	/**
-	 * Constructor that uses a custom configuration
-	 *
-	 * @param config
-	 *            configuration to use
-	 */
-	public ConfirmationBehavior(ConfirmationConfig config) {
-		this(null, config);
-	}
-
-	/**
-	 * Constructor that uses a custom configuration
-	 *
-	 * @param config
-	 *            configuration to use
-	 * @param selector
-	 *            Jquery selector to use instead of the one of the component
-	 *            (for singleton's option)
-	 */
-	public ConfirmationBehavior(String selector, ConfirmationConfig config) {
-		this.config = Args.notNull(config, "config");
-		this.selector = selector;
-	}
-
-	@Override
-	public void renderHead(Component component, IHeaderResponse response) {
-		super.renderHead(component, response);
-
-		References.renderWithFilter(response, JavaScriptHeaderItem
-				.forReference(new JQueryPluginResourceReference(ConfirmationBehavior.class, "bootstrap-confirmation.js")));
-
-		if (selector == null) {
-			config.withRootSelector(component.getMarkupId());
-			response.render($(component).chain("confirmation", config).asDomReadyScript());
-		} else {
-			config.withRootSelector(selector);
-			response.render($(selector).chain("confirmation", config).asDomReadyScript());
-		}
-	}
-
-	public static ConfirmationBehavior newOkCancelConfirm(Component c, String title) {
-		return new ConfirmationBehavior(newOkCancelConfirmCfg(c, title));
-	}
-
-	public static ConfirmationConfig newOkCancelConfirmCfg(Component c, String title) {
-		return new ConfirmationConfig()
-				.withBtnCancelLabel(c.getString("lbl.cancel"))
-				.withBtnOkLabel(c.getString("54"))
-				.withTitle(title);
-	}
-
-	public static ConfirmationBehavior newOkCancelDangerConfirm(Component c, String title) {
-		return new ConfirmationBehavior(newOkCancelConfirmCfg(c, title)
-				.withBtnOkClass("btn btn-sm btn-danger")
-				.withBtnOkIconClass("fas fa-exclamation-triangle")
-				);
-	}
-}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationConfig.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationConfig.java
deleted file mode 100644
index ddffd8a..0000000
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationConfig.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.common.confirmation;
-
-import org.apache.wicket.util.lang.Args;
-
-import de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipConfig;
-import de.agilecoders.wicket.jquery.AbstractConfig;
-import de.agilecoders.wicket.jquery.IKey;
-import de.agilecoders.wicket.jquery.Key;
-
-/**
- * The configuration of {@link ConfirmationBehavior}. <br/>
- * See
- * <a href="http://mistic100.github.io/Bootstrap-Confirmation/#usage">Bootstrap
- * Confirmation usage</a> for all possible options and their meaning.
- */
-public class ConfirmationConfig extends AbstractConfig {
-	private static final long serialVersionUID = 1L;
-	private static final IKey<String> Title = new Key<>("title", "Are you sure?");
-	private static final IKey<Boolean> Singleton = new Key<>("singleton", Boolean.FALSE);
-	private static final IKey<Boolean> Popout = new Key<>("popout", Boolean.FALSE);
-	private static final IKey<String> BtnOkClass = new Key<>("btnOkClass", "btn-xs btn-primary");
-	private static final IKey<String> BtnOkIconClass = new Key<>("btnOkIconClass", "glyphicon glyphicon-ok");
-	private static final IKey<String> BtnOkIconContent = new Key<>("btnOkIconContent");
-	private static final IKey<String> BtnOkLabel = new Key<>("btnOkLabel", "Yes");
-	private static final IKey<String> BtnCancelClass = new Key<>("btnCancelClass", "btn-xs btn-default");
-	private static final IKey<String> BtnCancelIconClass = new Key<>("btnCancelIconClass", "glyphicon glyphicon-remove");
-	private static final IKey<String> BtnCancelIconContent = new Key<>("btnCancelIconContent");
-	private static final IKey<String> BtnCancelLabel = new Key<>("btnCancelLabel", "No");
-	private static final IKey<TooltipConfig.Placement> Placement = new Key<>("placement", TooltipConfig.Placement.top);
-	private static final IKey<String> RootSelector = new Key<>("rootSelector");
-
-	public ConfirmationConfig withTitle(String title) {
-		put(Title, title);
-		return this;
-	}
-
-	ConfirmationConfig withRootSelector(String rootSelector) {
-		put(RootSelector, rootSelector);
-		return this;
-	}
-
-	public ConfirmationConfig withBtnOkClass(String btnOkClass) {
-		put(BtnOkClass, btnOkClass);
-		return this;
-	}
-
-	public ConfirmationConfig withBtnOkIconClass(String btnOkIconClass) {
-		put(BtnOkIconClass, btnOkIconClass);
-		return this;
-	}
-
-	public ConfirmationConfig withBtnOkIconContent(String btnOkIconContent) {
-		put(BtnOkIconContent, btnOkIconContent);
-		return this;
-	}
-
-	public ConfirmationConfig withBtnOkLabel(String btnOkLabel) {
-		put(BtnOkLabel, btnOkLabel);
-		return this;
-	}
-
-	public ConfirmationConfig withBtnCancelClass(String btnCancelClass) {
-		put(BtnCancelClass, btnCancelClass);
-		return this;
-	}
-
-	public ConfirmationConfig withBtnCancelIconClass(String btnCancelIconClass) {
-		put(BtnCancelIconClass, btnCancelIconClass);
-		return this;
-	}
-
-	public ConfirmationConfig withBtnCancelIconContent(String btnCancelIconContent) {
-		put(BtnCancelIconContent, btnCancelIconContent);
-		return this;
-	}
-
-	public ConfirmationConfig withBtnCancelLabel(String btnCancelLabel) {
-		put(BtnCancelLabel, btnCancelLabel);
-		return this;
-	}
-
-	public ConfirmationConfig withSingleton(boolean singleton) {
-		put(Singleton, singleton);
-		return this;
-	}
-
-	public ConfirmationConfig withPopout(boolean popout) {
-		put(Popout, popout);
-		return this;
-	}
-
-	public ConfirmationConfig withPlacement(TooltipConfig.Placement placement) {
-		put(Placement, Args.notNull(placement, "placement"));
-		return this;
-	}
-}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationHelper.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationHelper.java
new file mode 100644
index 0000000..b3a06cc
--- /dev/null
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationHelper.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common.confirmation;
+
+import org.apache.wicket.Component;
+
+import de.agilecoders.wicket.extensions.markup.html.bootstrap.confirmation.ConfirmationBehavior;
+import de.agilecoders.wicket.extensions.markup.html.bootstrap.confirmation.ConfirmationConfig;
+
+public class ConfirmationHelper {
+	public static ConfirmationBehavior newOkCancelConfirm(Component c, String title) {
+		return new ConfirmationBehavior(newOkCancelConfirmCfg(c, title));
+	}
+
+	public static ConfirmationConfig newOkCancelConfirmCfg(Component c, String title) {
+		return new ConfirmationConfig()
+				.withBtnCancelLabel(c.getString("lbl.cancel"))
+				.withBtnOkLabel(c.getString("54"))
+				.withTitle(title);
+	}
+
+	public static ConfirmationBehavior newOkCancelDangerConfirm(Component c, String title) {
+		return new ConfirmationBehavior(newOkCancelConfirmCfg(c, title)
+				.withBtnOkClass("btn btn-sm btn-danger")
+				.withBtnOkIconClass("fas fa-exclamation-triangle")
+				);
+	}
+}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/bootstrap-confirmation.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/bootstrap-confirmation.js
deleted file mode 100644
index 72fd81a..0000000
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/bootstrap-confirmation.js
+++ /dev/null
@@ -1,596 +0,0 @@
-/*!
- * Bootstrap Confirmation (v4.1.0)
- * @copyright 2013 Nimit Suwannagate <et...@hotmail.com>
- * @copyright 2014-2018 Damien "Mistic" Sorel <co...@git.strangeplanet.fr>
- * @licence Apache License, Version 2.0
- */
-/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
-(function (global, factory) {
-  typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'), require('bootstrap')) :
-  typeof define === 'function' && define.amd ? define(['jquery', 'bootstrap'], factory) :
-  (global = global || self, factory(global.jQuery));
-}(this, function ($) { 'use strict';
-
-  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
-
-  function _defineProperties(target, props) {
-    for (var i = 0; i < props.length; i++) {
-      var descriptor = props[i];
-      descriptor.enumerable = descriptor.enumerable || false;
-      descriptor.configurable = true;
-      if ("value" in descriptor) descriptor.writable = true;
-      Object.defineProperty(target, descriptor.key, descriptor);
-    }
-  }
-
-  function _createClass(Constructor, protoProps, staticProps) {
-    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
-    if (staticProps) _defineProperties(Constructor, staticProps);
-    return Constructor;
-  }
-
-  function _defineProperty(obj, key, value) {
-    if (key in obj) {
-      Object.defineProperty(obj, key, {
-        value: value,
-        enumerable: true,
-        configurable: true,
-        writable: true
-      });
-    } else {
-      obj[key] = value;
-    }
-
-    return obj;
-  }
-
-  function _objectSpread(target) {
-    for (var i = 1; i < arguments.length; i++) {
-      var source = arguments[i] != null ? arguments[i] : {};
-      var ownKeys = Object.keys(source);
-
-      if (typeof Object.getOwnPropertySymbols === 'function') {
-        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
-          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
-        }));
-      }
-
-      ownKeys.forEach(function (key) {
-        _defineProperty(target, key, source[key]);
-      });
-    }
-
-    return target;
-  }
-
-  function _inheritsLoose(subClass, superClass) {
-    subClass.prototype = Object.create(superClass.prototype);
-    subClass.prototype.constructor = subClass;
-    subClass.__proto__ = superClass;
-  }
-
-  if (typeof $.fn.popover === 'undefined' || $.fn.popover.Constructor.VERSION.split('.').shift() !== '4') {
-    throw new Error('Bootstrap Confirmation 4 requires Bootstrap Popover 4');
-  }
-
-  var Popover = $.fn.popover.Constructor;
-
-  /**
-   * ------------------------------------------------------------------------
-   * Constants
-   * ------------------------------------------------------------------------
-   */
-
-  var NAME = 'confirmation';
-  var VERSION = '4.1.0';
-  var DATA_KEY = "bs." + NAME;
-  var EVENT_KEY = "." + DATA_KEY;
-  var JQUERY_NO_CONFLICT = $.fn[NAME];
-  var BTN_CLASS_BASE = 'h-100 d-flex align-items-center';
-  var BTN_CLASS_DEFAULT = 'btn btn-sm';
-
-  var DefaultType = _objectSpread({}, Popover.DefaultType, {
-    singleton: 'boolean',
-    popout: 'boolean',
-    copyAttributes: '(string|array)',
-    onConfirm: 'function',
-    onCancel: 'function',
-    btnOkClass: 'string',
-    btnOkLabel: 'string',
-    btnOkIconClass: 'string',
-    btnOkIconContent: 'string',
-    btnCancelClass: 'string',
-    btnCancelLabel: 'string',
-    btnCancelIconClass: 'string',
-    btnCancelIconContent: 'string',
-    buttons: 'array'
-  });
-
-  var Default = _objectSpread({}, Popover.Default, {
-    _attributes: {},
-    _selector: null,
-    placement: 'top',
-    title: 'Are you sure?',
-    trigger: 'click',
-    confirmationEvent: undefined,
-    content: '',
-    singleton: false,
-    popout: false,
-    copyAttributes: 'href target',
-    onConfirm: $.noop,
-    onCancel: $.noop,
-    btnOkClass: BTN_CLASS_DEFAULT + " btn-primary",
-    btnOkLabel: 'Yes',
-    btnOkIconClass: '',
-    btnOkIconContent: '',
-    btnCancelClass: BTN_CLASS_DEFAULT + " btn-secondary",
-    btnCancelLabel: 'No',
-    btnCancelIconClass: '',
-    btnCancelIconContent: '',
-    buttons: [],
-    // @formatter:off
-    template: "\n<div class=\"popover confirmation\">\n  <div class=\"arrow\"></div>\n  <h3 class=\"popover-header\"></h3>\n  <div class=\"popover-body\">\n    <p class=\"confirmation-content\"></p>\n    <div class=\"confirmation-buttons text-center\">\n      <div class=\"btn-group\"></div>\n    </div>\n  </div>\n</div>" // @formatter:on
-
-  });
-
-  if (Default.whiteList) {
-    Default.whiteList['*'].push('data-apply', 'data-dismiss');
-  }
-
-  var ClassName = {
-    FADE: 'fade',
-    SHOW: 'show'
-  };
-  var Selector = {
-    TITLE: '.popover-header',
-    CONTENT: '.confirmation-content',
-    BUTTONS: '.confirmation-buttons .btn-group'
-  };
-  var Keymap = {
-    13: 'Enter',
-    27: 'Escape',
-    39: 'ArrowRight',
-    40: 'ArrowDown'
-  };
-  var Event = {
-    HIDE: "hide" + EVENT_KEY,
-    HIDDEN: "hidden" + EVENT_KEY,
-    SHOW: "show" + EVENT_KEY,
-    SHOWN: "shown" + EVENT_KEY,
-    INSERTED: "inserted" + EVENT_KEY,
-    CLICK: "click" + EVENT_KEY,
-    FOCUSIN: "focusin" + EVENT_KEY,
-    FOCUSOUT: "focusout" + EVENT_KEY,
-    MOUSEENTER: "mouseenter" + EVENT_KEY,
-    MOUSELEAVE: "mouseleave" + EVENT_KEY,
-    CONFIRMED: "confirmed" + EVENT_KEY,
-    CANCELED: "canceled" + EVENT_KEY,
-    KEYUP: "keyup" + EVENT_KEY
-  };
-  /**
-   * ------------------------------------------------------------------------
-   * Class Definition
-   * ------------------------------------------------------------------------
-   */
-  // keep track of the last openned confirmation for keyboard navigation
-
-  var activeConfirmation;
-
-  var Confirmation =
-  /*#__PURE__*/
-  function (_Popover) {
-    _inheritsLoose(Confirmation, _Popover);
-
-    _createClass(Confirmation, null, [{
-      key: "VERSION",
-      // Getters
-      get: function get() {
-        return VERSION;
-      }
-    }, {
-      key: "Default",
-      get: function get() {
-        return Default;
-      }
-    }, {
-      key: "NAME",
-      get: function get() {
-        return NAME;
-      }
-    }, {
-      key: "DATA_KEY",
-      get: function get() {
-        return DATA_KEY;
-      }
-    }, {
-      key: "Event",
-      get: function get() {
-        return Event;
-      }
-    }, {
-      key: "EVENT_KEY",
-      get: function get() {
-        return EVENT_KEY;
-      }
-    }, {
-      key: "DefaultType",
-      get: function get() {
-        return DefaultType;
-      } // Constructor
-
-    }]);
-
-    function Confirmation(element, config) {
-      var _this;
-
-      _this = _Popover.call(this, element, config) || this;
-      element.setAttribute('title', element.getAttribute('data-original-title'));
-      element.setAttribute('data-original-title', '');
-
-      if ((_this.config.popout || _this.config.singleton) && !_this.config.rootSelector) {
-        throw new Error('The rootSelector option is required to use popout and singleton features since jQuery 3.');
-      } // keep trace of selectors
-
-
-      _this._isDelegate = false;
-
-      if (config.selector) {
-        // container of buttons
-        config._selector = config.rootSelector + " " + config.selector;
-        _this.config._selector = config._selector;
-      } else if (config._selector) {
-        // children of container
-        _this.config._selector = config._selector;
-        _this._isDelegate = true;
-      } else {
-        // standalone
-        _this.config._selector = config.rootSelector;
-      }
-
-      if (_this.config.confirmationEvent === undefined) {
-        _this.config.confirmationEvent = _this.config.trigger;
-      }
-
-      if (!_this.config.selector) {
-        _this._copyAttributes();
-      }
-
-      _this._setConfirmationListeners();
-
-      return _this;
-    } // Overrides
-
-
-    var _proto = Confirmation.prototype;
-
-    _proto.isWithContent = function isWithContent() {
-      return true;
-    };
-
-    _proto.setContent = function setContent() {
-      var $tip = $(this.getTipElement());
-
-      var content = this._getContent();
-
-      if (typeof content === 'function') {
-        content = content.call(this.element);
-      }
-
-      this.setElementContent($tip.find(Selector.TITLE), this.getTitle());
-      $tip.find(Selector.CONTENT).toggle(!!content);
-
-      if (content) {
-        this.setElementContent($tip.find(Selector.CONTENT), content);
-      }
-
-      if (this.config.buttons.length > 0) {
-        this._setButtons($tip, this.config.buttons);
-      } else {
-        this._setStandardButtons($tip);
-      }
-
-      $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW);
-
-      this._setupKeyupEvent();
-    };
-
-    _proto.dispose = function dispose() {
-      $('body').off(Event.CLICK + "." + this.uid);
-      this.eventBody = false;
-
-      this._cleanKeyupEvent();
-
-      _Popover.prototype.dispose.call(this);
-    };
-
-    _proto.hide = function hide(callback) {
-      this._cleanKeyupEvent();
-
-      _Popover.prototype.hide.call(this, callback);
-    } // Private
-
-    /**
-     * Copy the value of `copyAttributes` on the config object
-     * @private
-     */
-    ;
-
-    _proto._copyAttributes = function _copyAttributes() {
-      var _this2 = this;
-
-      this.config._attributes = {};
-
-      if (this.config.copyAttributes) {
-        if (typeof this.config.copyAttributes === 'string') {
-          this.config.copyAttributes = this.config.copyAttributes.split(' ');
-        }
-      } else {
-        this.config.copyAttributes = [];
-      }
-
-      this.config.copyAttributes.forEach(function (attr) {
-        _this2.config._attributes[attr] = $(_this2.element).attr(attr);
-      });
-    }
-    /**
-     * Custom event listeners for popouts and singletons
-     * @private
-     */
-    ;
-
-    _proto._setConfirmationListeners = function _setConfirmationListeners() {
-      var self = this;
-
-      if (!this.config.selector) {
-        // cancel original event
-        $(this.element).on(this.config.trigger, function (e, ack) {
-          if (!ack) {
-            e.preventDefault();
-            e.stopPropagation();
-            e.stopImmediatePropagation();
-          }
-        }); // manage singleton
-
-        $(this.element).on(Event.SHOWN, function () {
-          if (self.config.singleton) {
-            // close all other popover already initialized
-            $(self.config._selector).not($(this)).filter(function () {
-              return $(this).data(DATA_KEY) !== undefined;
-            }).confirmation('hide');
-          }
-        });
-      } else {
-        // cancel original event
-        $(this.element).on(this.config.trigger, this.config.selector, function (e, ack) {
-          if (!ack) {
-            e.preventDefault();
-            e.stopPropagation();
-            e.stopImmediatePropagation();
-          }
-        });
-      }
-
-      if (!this._isDelegate) {
-        // manage popout
-        this.eventBody = false;
-        this.uid = this.element.id || Confirmation.getUID(NAME + "_group");
-        $(this.element).on(Event.SHOWN, function () {
-          if (self.config.popout && !self.eventBody) {
-            self.eventBody = $('body').on(Event.CLICK + "." + self.uid, function (e) {
-              if ($(self.config._selector).is(e.target) || $(self.config._selector).has(e.target).length > 0) {
-                return;
-              } // close all popover already initialized
-
-
-              $(self.config._selector).filter(function () {
-                return $(this).data(DATA_KEY) !== undefined;
-              }).confirmation('hide');
-              $('body').off(Event.CLICK + "." + self.uid);
-              self.eventBody = false;
-            });
-          }
-        });
-      }
-    }
-    /**
-     * Init the standard ok/cancel buttons
-     * @param $tip
-     * @private
-     */
-    ;
-
-    _proto._setStandardButtons = function _setStandardButtons($tip) {
-      var buttons = [{
-        class: this.config.btnOkClass,
-        label: this.config.btnOkLabel,
-        iconClass: this.config.btnOkIconClass,
-        iconContent: this.config.btnOkIconContent,
-        attr: this.config._attributes
-      }, {
-        class: this.config.btnCancelClass,
-        label: this.config.btnCancelLabel,
-        iconClass: this.config.btnCancelIconClass,
-        iconContent: this.config.btnCancelIconContent,
-        cancel: true
-      }];
-
-      this._setButtons($tip, buttons);
-    }
-    /**
-     * Init the buttons
-     * @param $tip
-     * @param buttons
-     * @private
-     */
-    ;
-
-    _proto._setButtons = function _setButtons($tip, buttons) {
-      var self = this;
-      var $group = $tip.find(Selector.BUTTONS).empty();
-      buttons.forEach(function (button) {
-        var btn = $('<a href="#"></a>').addClass(BTN_CLASS_BASE).addClass(button.class || BTN_CLASS_DEFAULT + " btn-secondary").html(button.label || '').attr(button.attr || {});
-
-        if (button.iconClass || button.iconContent) {
-          btn.prepend($('<i></i>').addClass(button.iconClass || '').text(button.iconContent || ''));
-        }
-
-        btn.one('click', function (e) {
-          if ($(this).attr('href') === '#') {
-            e.preventDefault();
-          }
-
-          if (button.onClick) {
-            button.onClick.call($(self.element));
-          }
-
-          if (button.cancel) {
-            self.config.onCancel.call(self.element, button.value);
-            $(self.element).trigger(Event.CANCELED, [button.value]);
-          } else {
-            self.config.onConfirm.call(self.element, button.value);
-            $(self.element).trigger(Event.CONFIRMED, [button.value]);
-            $(self.element).trigger(self.config.confirmationEvent, [true]);
-          }
-
-          self.hide();
-        });
-        $group.append(btn);
-      });
-    }
-    /**
-     * Install the keyboatd event handler
-     * @private
-     */
-    ;
-
-    _proto._setupKeyupEvent = function _setupKeyupEvent() {
-      activeConfirmation = this;
-      $(window).off(Event.KEYUP).on(Event.KEYUP, this._onKeyup.bind(this));
-    }
-    /**
-     * Remove the keyboard event handler
-     * @private
-     */
-    ;
-
-    _proto._cleanKeyupEvent = function _cleanKeyupEvent() {
-      if (activeConfirmation === this) {
-        activeConfirmation = undefined;
-        $(window).off(Event.KEYUP);
-      }
-    }
-    /**
-     * Event handler for keyboard navigation
-     * @param event
-     * @private
-     */
-    ;
-
-    _proto._onKeyup = function _onKeyup(event) {
-      if (!this.tip) {
-        this._cleanKeyupEvent();
-
-        return;
-      }
-
-      var $tip = $(this.getTipElement());
-      var key = event.key || Keymap[event.keyCode || event.which];
-      var $group = $tip.find(Selector.BUTTONS);
-      var $active = $group.find('.active');
-      var $next;
-
-      switch (key) {
-        case 'Escape':
-          this.hide();
-          break;
-
-        case 'ArrowRight':
-          if ($active.length && $active.next().length) {
-            $next = $active.next();
-          } else {
-            $next = $group.children().first();
-          }
-
-          $active.removeClass('active');
-          $next.addClass('active').focus();
-          break;
-
-        case 'ArrowLeft':
-          if ($active.length && $active.prev().length) {
-            $next = $active.prev();
-          } else {
-            $next = $group.children().last();
-          }
-
-          $active.removeClass('active');
-          $next.addClass('active').focus();
-          break;
-
-        default:
-          break;
-      }
-    } // Static
-
-    /**
-     * Generates an uui, copied from Bootrap's utils
-     * @param {string} prefix
-     * @returns {string}
-     */
-    ;
-
-    Confirmation.getUID = function getUID(prefix) {
-      var uid = prefix;
-
-      do {
-        // eslint-disable-next-line no-bitwise
-        uid += ~~(Math.random() * 1000000); // "~~" acts like a faster Math.floor() here
-      } while (document.getElementById(uid));
-
-      return uid;
-    };
-
-    Confirmation._jQueryInterface = function _jQueryInterface(config) {
-      return this.each(function () {
-        var data = $(this).data(DATA_KEY);
-
-        var _config = typeof config === 'object' ? config : {};
-
-        _config.rootSelector = $(this).selector || _config.rootSelector; // this.selector removed in jQuery > 3
-
-        if (!data && /destroy|hide/.test(config)) {
-          return;
-        }
-
-        if (!data) {
-          data = new Confirmation(this, _config);
-          $(this).data(DATA_KEY, data);
-        }
-
-        if (typeof config === 'string') {
-          if (typeof data[config] === 'undefined') {
-            throw new TypeError("No method named \"" + config + "\"");
-          }
-
-          data[config]();
-        }
-      });
-    };
-
-    return Confirmation;
-  }(Popover);
-  /**
-   * ------------------------------------------------------------------------
-   * jQuery
-   * ------------------------------------------------------------------------
-   */
-
-
-  $.fn[NAME] = Confirmation._jQueryInterface;
-  $.fn[NAME].Constructor = Confirmation;
-
-  $.fn[NAME].noConflict = function () {
-    $.fn[NAME] = JQUERY_NO_CONFLICT;
-    return Confirmation._jQueryInterface;
-  };
-
-}));
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/NetTestPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/NetTestPanel.html
index 196bfc31..b1b6a03 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/NetTestPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/NetTestPanel.html
@@ -31,36 +31,44 @@
 			<div class="card-body">
 				<h5 class="card-title"><i class="far fa-clock"></i>&nbsp;<wicket:message key="network.test.ping"/></h5>
 				<p class="card-text value"></p>
-				<button class="test-btn btn btn-block btn-outline not-started" data-measure="ping" data-start="true" data-next="jitter" wicket:message="data-lbl:network.test.ping">
-					<i class="fas"></i>
-				</button>
+				<div class="d-grid gap-2">
+					<button class="test-btn btn btn-outline not-started" data-measure="ping" data-start="true" data-next="jitter" wicket:message="data-lbl:network.test.ping">
+						<i class="fas"></i>
+					</button>
+				</div>
 			</div>
 		</div>
 		<div class="test-container card" id="test-jitter">
 			<div class="card-body">
 				<h5 class="card-title"><i class="far fa-clock"></i>&nbsp;<wicket:message key="network.test.jitter"/></h5>
 				<p class="card-text value"></p>
-				<button class="test-btn btn btn-block btn-outline not-started" data-measure="jitter" data-next="upload" wicket:message="data-lbl:network.test.jitter">
-					<i class="fas"></i>
-				</button>
+				<div class="d-grid gap-2">
+					<button class="test-btn btn btn-outline not-started" data-measure="jitter" data-next="upload" wicket:message="data-lbl:network.test.jitter">
+						<i class="fas"></i>
+					</button>
+				</div>
 			</div>
 		</div>
 		<div class="test-container card" id="test-upload">
 			<div class="card-body">
 				<h5 class="card-title"><i class="fas fa-file-upload"></i>&nbsp;<wicket:message key="network.test.upl"/></h5>
 				<p class="card-text value"></p>
-				<button class="test-btn btn btn-block btn-outline not-started" data-measure="upload" data-next="download" wicket:message="data-lbl:network.test.upl">
-					<i class="fas"></i>
-				</button>
+				<div class="d-grid gap-2">
+					<button class="test-btn btn btn-outline not-started" data-measure="upload" data-next="download" wicket:message="data-lbl:network.test.upl">
+						<i class="fas"></i>
+					</button>
+				</div>
 			</div>
 		</div>
 		<div class="test-container card" id="test-download">
 			<div class="card-body">
 				<h5 class="card-title"><i class="fas fa-file-download"></i>&nbsp;<wicket:message key="network.test.dwn"/></h5>
 				<p class="card-text value"></p>
-				<button class="test-btn btn btn-block btn-outline not-started" data-measure="download" wicket:message="data-lbl:network.test.dwn">
-					<i class="fas"></i>
-				</button>
+				<div class="d-grid gap-2">
+					<button class="test-btn btn btn-outline not-started" data-measure="download" wicket:message="data-lbl:network.test.dwn">
+						<i class="fas"></i>
+					</button>
+				</div>
 			</div>
 		</div>
 		<div class="output">
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 f0698d8..8847544 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
@@ -81,7 +81,7 @@
 			<div class="modal-content">
 				<div class="modal-header">
 					<h5 class="modal-title"><wicket:message key="204"/></h5>
-					<button type="button" class="close" data-bs-dismiss="modal" wicket:message="aria-label:85"></button>
+					<button type="button" class="btn-close" data-bs-dismiss="modal" wicket:message="aria-label:85"></button>
 				</div>
 				<div class="modal-body">
 					<wicket:message key="556"/>
@@ -128,18 +128,18 @@
 		</div>
 		<div id="quick-vote-template">
 			<div class="close-btn btn btn-outline-secondary btn-sm"
-				 wicket:message="title:85,data-btn-ok-label:54,data-btn-cancel-label:lbl.cancel,data-title:832,data-content:1419"
+				 wicket:message="title:85,data-btn-ok-label:54,data-btn-cancel-label:lbl.cancel,data-title:832,data-bs-content:1419"
 				 data-btn-ok-class="btn btn-sm btn-danger"
 				 data-btn-ok-icon-class="fas fa-exclamation-triangle">
 				<i class="fas fa-times"></i>
 			</div>
 			<div class="control pro clickable">
 				<i class="fas fa-plus-circle"></i>
-				<span class="badge badge-primary">0</span>
+				<span class="badge bg-primary">0</span>
 			</div>
 			<div class="control con">
 				<i class="fas fa-times-circle"></i>
-				<span class="badge badge-primary">0</span>
+				<span class="badge bg-primary">0</span>
 			</div>
 		</div>
 		<div id="sharer" wicket:message="title:730">
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.html
index b6a2363..2d98bc3 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.html
@@ -78,7 +78,7 @@
 							</div>
 							<canvas class="level-meter" data-orientation="horizontal" wicket:message="title:767" width="250" height="16"></canvas>
 							<div class="sett-row right">
-								<div class="timer badge badge-primary"><span class="time"></span>&nbsp;<wicket:message key="network.test.sec"/></div>
+								<div class="timer badge bg-primary"><span class="time"></span>&nbsp;<wicket:message key="network.test.sec"/></div>
 								<div><button class="play btn btn-outline-primary"><i class="fas fa-play"></i>&nbsp;<wicket:message key="764"/></button></div>
 								<div class="clear"></div>
 							</div>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.html
index b18e23a..2674f50 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.html
@@ -23,7 +23,7 @@
 <wicket:panel>
 	<div class="clickable control block bg-secondary" wicket:message="data-new-aa:notification.room.activity">
 		<i class="fas me-1 fa-angle-up"></i>
-		<span class="badge badge-secondary">42</span>
+		<span class="badge bg-secondary">42</span>
 		<div class="label"><wicket:message key="1363"/></div>
 	</div>
 	<div class="ctrl bg-white">
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 3522b44..bfa2ef8 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
@@ -21,7 +21,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.BasePanel.EVT_CHANGE;
-import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
+import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-nettest.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-nettest.js
index d2d111d..26bab6e 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-nettest.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-nettest.js
@@ -214,7 +214,7 @@ var NetTest = (function() {
 	function _setResult(val) {
 		const btn = _btn();
 		btn.addClass('complete').removeClass('started');
-		btn.parent().find('.value').html(val);
+		btn.parent().parent().find('.value').html(val);
 		testNext = btn.data('next');
 		if (!testNext) {
 			bulk = false;
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 14123fe..ac671e8 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
@@ -24,13 +24,13 @@
 	<div class="tabs" id="room-sidebar-tabs">
 		<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">
+				<a href="#room-sidebar-tab-users" class="nav-link active om-icon big tab user" id="room-sidebar-users-tab" data-bs-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 class="badge badge-info user-count"></span>
+					<span class="label"><wicket:message key="398"/>&nbsp;</span><span class="badge bg-info user-count"></span>
 				</a>
 			</li>
 			<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">
+				<a href="#room-sidebar-tab-files" class="nav-link om-icon big tab file" id="room-sidebar-files-tab" data-bs-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>
@@ -106,7 +106,7 @@
 				<i class="fas"></i>
 			</span>
 			<span class="om-icon align-left kick bumper clickable"
-					wicket:message="title:603,data-btn-ok-label:54,data-btn-cancel-label:lbl.cancel,data-title:603,data-content:605"
+					wicket:message="title:603,data-btn-ok-label:54,data-btn-cancel-label:lbl.cancel,data-title:603,data-bs-content:605"
 					data-btn-ok-class="btn btn-sm btn-danger"
 					data-btn-ok-icon-class="fas fa-exclamation-triangle">
 				<i class="fas fa-ban text-danger"></i>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html
index c442b36..4c09f6f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html
@@ -41,13 +41,13 @@
 		</div>
 		<ul>
 			<li id="wb-area-tab" class="nav-item">
-				<a class="nav-link" data-toggle="tab" role="tab">
+				<a class="nav-link" data-bs-toggle="tab" role="tab">
 					<span class="wb-nav-tab-text"></span>
 				</a>
 			</li>
 		</ul>
 		<button id="wb-tab-close" class="btn btn-sm btn-outline-secondary btn-no-border wb-tab-close"
-				wicket:message="title:85,data-btn-ok-label:54,data-btn-cancel-label:lbl.cancel,data-title:832,data-content:1313"
+				wicket:message="title:85,data-btn-ok-label:54,data-btn-cancel-label:lbl.cancel,data-title:832,data-bs-content:1313"
 				data-btn-ok-class="btn btn-sm btn-danger"
 				data-btn-ok-icon-class="fas fa-exclamation-triangle"
 				>
@@ -55,14 +55,14 @@
 			<span class="sr-only"><wicket:message key="85"/></span>
 		</button>
 		<div id="wb-area-texts" class="btn-group texts dropleft">
-			<a class="dropdown-toggle" data-toggle="dropdown"></a>
+			<a class="dropdown-toggle" data-bs-toggle="dropdown"></a>
 			<div class="dropdown-menu">
 				<div wicket:message="title:73" class="clickable om-icon big text"></div>
 				<div wicket:message="title:82" class="clickable om-icon big textbox"></div>
 			</div>
 		</div>
 		<div id="wb-area-drawings" class="btn-group drawings dropleft">
-			<a class="dropdown-toggle" data-toggle="dropdown"></a>
+			<a class="dropdown-toggle" data-bs-toggle="dropdown"></a>
 			<div class="dropdown-menu">
 				<div wicket:message="title:74" class="clickable om-icon big paint"></div>
 				<div wicket:message="title:75" class="clickable om-icon big line"></div>
@@ -74,7 +74,7 @@
 			</div>
 		</div>
 		<div id="wb-area-cliparts" class="btn-group cliparts dropleft">
-			<a class="dropdown-toggle" data-toggle="dropdown" wicket:message="title:1323"></a>
+			<a class="dropdown-toggle" data-bs-toggle="dropdown" wicket:message="title:1323"></a>
 			<div class="dropdown-menu">
 				<div wicket:id="clipart" class="clickable om-icon big clipart" data-image="./public/cliparts/"></div>
 			</div>
@@ -130,11 +130,11 @@
 		</div>
 		<div id="wb-tools">
 			<div class="clickable om-icon big clear-all"
-				wicket:message="title:62,data-btn-ok-label:54,data-btn-cancel-label:lbl.cancel,data-title:80,data-content:1340"
+				wicket:message="title:62,data-btn-ok-label:54,data-btn-cancel-label:lbl.cancel,data-title:80,data-bs-content:1340"
 				data-btn-ok-class="btn btn-sm btn-danger"
 				data-btn-ok-icon-class="fas fa-exclamation-triangle"></div>
 			<div class="clickable om-icon big clear-slide"
-				wicket:message="title:1005,data-btn-ok-label:54,data-btn-cancel-label:lbl.cancel,data-title:80,data-content:1359"
+				wicket:message="title:1005,data-btn-ok-label:54,data-btn-cancel-label:lbl.cancel,data-title:80,data-bs-content:1359"
 				data-btn-ok-class="btn btn-sm btn-danger"
 				data-btn-ok-icon-class="fas fa-exclamation-triangle"></div>
 			<div wicket:message="title:199" class="clickable om-icon big save"></div>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/OmWysiwygToolbar.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/OmWysiwygToolbar.html
index 0ebca7b..48c1e2e 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/OmWysiwygToolbar.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/OmWysiwygToolbar.html
@@ -20,7 +20,7 @@
 <wicket:panel>
 	<div wicket:id="toolbar" class="btn-toolbar wysiwyg-toolbar" data-role="editor-toolbar">
 		<div class="btn-group">
-			<a wicket:id="fontSize" id="fontSize" class="btn btn-outline-secondary dropdown-toggle" data-toggle="dropdown" role="button" title="Font Size"> A </a>
+			<a wicket:id="fontSize" id="fontSize" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" role="button" title="Font Size"> A </a>
 			<ul class="dropdown-menu">
 				<li><a wicket:id="huge" class="font-huge text-center clickable" data-edit="fontSize 5"></a></li>
 				<li><a wicket:id="medium" class="font-small text-center clickable" data-edit="fontSize 3"></a></li>
@@ -62,7 +62,7 @@
 			</a>
 		</div>
 		<div class="btn-group">
-			<a wicket:id="hyperlink" class="btn btn-outline-secondary dropdown-toggle" data-toggle="dropdown" title="">
+			<a wicket:id="hyperlink" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" title="">
 				<i class="fas fa-link"></i>
 			</a>
 			<div class="dropdown-menu input-append">
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html
index 21b61a6..bcf293e 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html
@@ -25,9 +25,9 @@
 		<span wicket:id="feedback"></span>
 		<div class="tabs">
 			<ul class="nav nav-tabs" role="tablist">
-				<li class="nav-item"><a class="nav-link active" id="tab1-tab" data-toggle="tab" role="tab" aria-controls="tab1" href="#tab1"><wicket:message key="lbl.general"/></a></li>
-				<li class="nav-item"><a class="nav-link" id="tab2-tab" data-toggle="tab" role="tab" aria-controls="tab2" href="#tab2"><wicket:message key="406"/></a></li>
-				<li class="nav-item"><a class="nav-link" id="tab3-tab" data-toggle="tab" role="tab" aria-controls="tab3" href="#tab3"><wicket:message key="appointment.tab.advanced"/></a></li>
+				<li class="nav-item"><a class="nav-link active" id="tab1-tab" data-bs-toggle="tab" role="tab" aria-controls="tab1" href="#tab1"><wicket:message key="lbl.general"/></a></li>
+				<li class="nav-item"><a class="nav-link" id="tab2-tab" data-bs-toggle="tab" role="tab" aria-controls="tab2" href="#tab2"><wicket:message key="406"/></a></li>
+				<li class="nav-item"><a class="nav-link" id="tab3-tab" data-bs-toggle="tab" role="tab" aria-controls="tab3" href="#tab3"><wicket:message key="appointment.tab.advanced"/></a></li>
 			</ul>
 			<div class="tab-content">
 				<div id="tab1" class="tab-pane fade show active pt-1" role="tabpanel" aria-labelledby="tab1-tab">
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 9100e9b..757d0b3 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
@@ -22,7 +22,7 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.isMyRoomsEnable
 import static org.apache.openmeetings.web.app.WebSession.getRights;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 import static org.apache.openmeetings.web.common.BasePanel.EVT_CHANGE;
-import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
+import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
 import static org.apache.openmeetings.web.util.CalendarWebHelper.getDate;
 import static org.apache.openmeetings.web.util.CalendarWebHelper.getDateTime;
 
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 2ab4c66..68156a6 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
@@ -19,7 +19,7 @@
 package org.apache.openmeetings.web.user.calendar;
 
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
+import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
 
 import java.util.List;
 
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
index 3edfb5c..6e4f265 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.html
@@ -22,13 +22,13 @@
 <html xmlns:wicket="http://wicket.apache.org">
 <wicket:panel>
 	<div wicket:id="toolbar" class="btn-toolbar chat-toolbar navbar navbar-expand navbar-light bg-light p-0" data-role="editor-toolbar">
-		<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarChatContent" aria-controls="navbarChatContent" aria-expanded="false">
+		<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarChatContent" aria-controls="navbarChatContent" aria-expanded="false">
 			<span class="navbar-toggler-icon"></span>
 		</button>
 		<div class="collapse navbar-collapse" id="navbarChatContent">
 			<ul class="navbar-nav ms-auto">
 				<li class="nav-item dropup">
-					<a id="emoticons" class="chat btn btn-outline-secondary emt dropdown-toggle nav-link" data-toggle="dropdown" title="Emoticons"></a>
+					<a id="emoticons" class="chat btn btn-outline-secondary emt dropdown-toggle nav-link" data-bs-toggle="dropdown" title="Emoticons"></a>
 					<ul class="chat dropdown-menu" >
 						<li>
 							<table id="emotMenuList">
@@ -37,7 +37,7 @@
 					</ul>
 				</li>
 				<li class="nav-item dropup">
-					<a id="fontSize" class="chat btn btn-outline-secondary dropdown-toggle nav-link" data-toggle="dropdown" role="button" title="Font Size"> A </a>
+					<a id="fontSize" class="chat btn btn-outline-secondary dropdown-toggle nav-link" data-bs-toggle="dropdown" role="button" title="Font Size"> A </a>
 					<div class="dropdown-menu">
 						<a class="dropdown-item" data-edit="fontSize 5"><span class="font-huge text-center clickable">Huge</span></a>
 						<a class="dropdown-item" data-edit="fontSize 3"><span class="font-small text-center clickable">Normal</span></a>
@@ -45,7 +45,7 @@
 					</div>
 				</li>
 				<li class="nav-item dropup">
-					<a id="fontStyle" class="chat btn btn-outline-secondary dropdown-toggle nav-link" data-toggle="dropdown" title="Font Style">
+					<a id="fontStyle" class="chat btn btn-outline-secondary dropdown-toggle nav-link" data-bs-toggle="dropdown" title="Font Style">
 						<i class="fas fa-cog"></i>
 					</a>
 					<ul class="dropdown-menu btns-only">
@@ -56,7 +56,7 @@
 					</ul>
 				</li>
 				<li class="nav-item dropup">
-					<a id="hyperlink" class="chat btn btn-outline-secondary dropdown-toggle nav-link" data-toggle="dropdown" title="Hyperlink">
+					<a id="hyperlink" class="chat btn btn-outline-secondary dropdown-toggle nav-link" data-bs-toggle="dropdown" title="Hyperlink">
 						<i class="fas fa-link"></i>
 					</a>
 					<div class="dropdown-menu input-append">
@@ -65,7 +65,7 @@
 					</div>
 				</li>
 				<li class="nav-item dropup">
-					<a id="actions" class="chat btn btn-outline-secondary dropdown-toggle nav-link" data-toggle="dropdown" wicket:message="title:635">
+					<a id="actions" class="chat btn btn-outline-secondary dropdown-toggle nav-link" data-bs-toggle="dropdown" wicket:message="title:635">
 						<i class="fas fa-bars"></i>
 					</a>
 					<ul class="dropdown-menu btns-only">
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.java
index 635866c..eb4394a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.java
@@ -26,7 +26,7 @@ import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
 import static org.apache.openmeetings.web.app.WebSession.getRights;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 import static org.apache.openmeetings.web.common.BasePanel.EVT_CLICK;
-import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
+import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
 import static org.apache.openmeetings.web.room.RoomPanel.isModerator;
 
 import java.util.List;
@@ -173,7 +173,7 @@ public class ChatToolbar extends Panel implements IWysiwygToolbar {
 
 	@Override
 	public void attachToEditor(Component editor) {
-		toolbar.add(AttributeModifier.replace("data-target", JQueryWidget.getSelector(editor)));
+		toolbar.add(AttributeModifier.replace("data-bs-target", JQueryWidget.getSelector(editor)));
 	}
 
 	@Override
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.html
index e1cfaca..34d1e4c 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.html
@@ -24,8 +24,8 @@
 	<div id="feedcontainer"></div>
 	<div class="d-none">
 		<div class="card" id="rss-item-template">
-			<div class="card-header p-0">
-				<button class="btn btn-outline-info btn-block" type="button" data-toggle="collapse"></button>
+			<div class="card-header p-0 d-grid gap-2">
+				<button class="btn btn-outline-info" type="button" data-bs-toggle="collapse"></button>
 			</div>
 			<div class="collapse">
 				<div class="card-body"></div>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.html
index 5228ede..f6b7324 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.html
@@ -23,21 +23,21 @@
 <wicket:panel>
 	<h3><wicket:message key="widget.start.header"/></h3>
 	<div wicket:id="step1" class="clickable start_step1">
-		<span class="badge badge-pill badge-secondary">1</span>
+		<span class="badge rounded-pill bg-secondary">1</span>
 		<wicket:message key="768"/>
 	</div>
 	<div wicket:id="step2" class="clickable start_step2">
-		<span class="badge badge-pill badge-secondary">2</span>
+		<span class="badge rounded-pill bg-secondary">2</span>
 		<wicket:message key="771"/>
 	</div>
 	<div wicket:id="step3" class="start_step3">
 		<a wicket:id="avTest" target="_blank" rel="noopener noreferrer">
-			<span class="badge badge-pill badge-secondary">3</span>
+			<span class="badge rounded-pill bg-secondary">3</span>
 			<wicket:message key="772"/>
 		</a>
 	</div>
 	<div wicket:id="step4" class="clickable start_step4">
-		<span class="badge badge-pill badge-secondary">4</span>
+		<span class="badge rounded-pill bg-secondary">4</span>
 		<wicket:message key="773"/>
 	</div>
 	<table>
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 5d76376..44509eb 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
@@ -26,7 +26,7 @@ import static org.apache.openmeetings.cli.CleanupHelper.getRecUnit;
 import static org.apache.openmeetings.util.OmFileHelper.getHumanSize;
 import static org.apache.openmeetings.util.OmFileHelper.getStreamsDir;
 import static org.apache.openmeetings.util.OmFileHelper.getUploadDir;
-import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
+import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
 
 import org.apache.openmeetings.cli.CleanupEntityUnit;
 import org.apache.openmeetings.cli.CleanupUnit;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/rss.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/rss.js
index 9ef9f64..5704a31 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/rss.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/rss.js
@@ -12,7 +12,7 @@ function displayRss(entries) {
 			, bodyId = `om-rss-content${i}`
 			, markup = OmUtil.tmpl('#rss-item-template');
 		markup.find('.card-header').attr('id', headId);
-		markup.find('button').attr('data-target', `#${bodyId}`).attr('aria-controls', bodyId)
+		markup.find('button').attr('data-bs-target', `#${bodyId}`).attr('aria-controls', bodyId)
 			.append(entries[i].title);
 		markup.find('.collapse').attr('id', bodyId).attr('aria-labelledby', headId);
 		markup.find('.card-body').html(entries[i].content);
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/InvitationDetails.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/InvitationDetails.java
index f8df56a..8e968e4 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/InvitationDetails.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/InvitationDetails.java
@@ -20,7 +20,7 @@ package org.apache.openmeetings.web.user.profile;
 
 import static org.apache.openmeetings.db.util.FormatHelper.formatUser;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
+import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
 
 import java.util.Date;
 
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/InvitationsPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/InvitationsPanel.html
index 36d5a89..fe5549a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/InvitationsPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/InvitationsPanel.html
@@ -24,7 +24,7 @@
 	<div class="adminPanel profile-panel">
 	<div class="adminPanelColumnTable">
 		<div class="adminNav" wicket:id="navigator">[dataview navigator]</div>
-		<table class="list-table table-striped table-hover">
+		<table class="list-table table table-striped table-hover">
 			<thead>
 				<tr>
 					<th class="col-1"><span wicket:id="orderById"></span><wicket:message key="188" /></th>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java
index 83d6b73..f5f6819 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java
@@ -24,7 +24,7 @@ import static org.apache.openmeetings.db.entity.user.PrivateMessage.TRASH_FOLDER
 import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
 import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
+import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
 
 import java.util.ArrayList;
 import java.util.HashSet;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html
index 5313e19..da9e44f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html
@@ -37,7 +37,7 @@
 		</div>
 		<div wicket:id="container" class="pe-3 h-100">
 			<div><strong><wicket:message key="1184"/></strong>&nbsp;&nbsp;&nbsp;<div class="adminNav"  wicket:id="navigator"></div></div>
-			<table id="searchUsersTable" class="list-table table-striped table-hover">
+			<table id="searchUsersTable" class="list-table table table-striped table-hover">
 				<thead>
 					<tr>
 						<th class="col-3"><wicket:message key="165"/></th>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.html
index d693306..b3ead92 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.html
@@ -21,7 +21,7 @@
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org">
 <wicket:panel>
-	<table class="widget table-striped table-hover">
+	<table class="widget table table-striped table-hover">
 		<tr>
 			<th><wicket:message key="165"/></th>
 			<th><wicket:message key="lbl.description"/></th>
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
index 76879b3..e4a09ba 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
@@ -63,7 +63,7 @@
 			<property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp2.BasicDataSource" />
 			<property name="openjpa.ConnectionProperties"
 				value="DriverClassName=com.mysql.cj.jdbc.Driver
-					, Url=jdbc:mysql://localhost:3306/openmeetings?autoReconnect=true&amp;useUnicode=true&amp;createDatabaseIfNotExist=true&amp;characterEncoding=utf-8&amp;connectionCollation=utf8_general_ci&amp;cachePrepStmts=true&amp;cacheCallableStatements=true&amp;cacheServerConfiguration=true&amp;useLocalSessionState=true&amp;elideSetAutoCommits=true&amp;alwaysSendSetIsolation=false&amp;enableQueryTimeouts=false&amp;prepStmtCacheSize=3000&amp;prepStmtCacheSqlLimit=1000&amp;useSSL=false&amp;nullNam [...]
+					, Url=jdbc:mysql://192.168.1.102:3306/openmeetings?autoReconnect=true&amp;useUnicode=true&amp;createDatabaseIfNotExist=true&amp;characterEncoding=utf-8&amp;connectionCollation=utf8_general_ci&amp;cachePrepStmts=true&amp;cacheCallableStatements=true&amp;cacheServerConfiguration=true&amp;useLocalSessionState=true&amp;elideSetAutoCommits=true&amp;alwaysSendSetIsolation=false&amp;enableQueryTimeouts=false&amp;prepStmtCacheSize=3000&amp;prepStmtCacheSqlLimit=1000&amp;useSSL=false&amp;nul [...]
 					, maxTotal=100
 					, maxIdle=100
 					, minIdle=0
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings.properties b/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings.properties
index 54796a3..3c60aa4 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings.properties
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings.properties
@@ -65,7 +65,7 @@ nettest.max.clients=50
 
 ################## SIP ##################
 ### Should be updated with real values for Asterisk ###
-sip.hostname=
+sip.hostname=192.168.1.102
 sip.manager.port=5038
 sip.manager.user=openmeetings
 sip.manager.password=12345
@@ -74,7 +74,7 @@ sip.manager.timeout=10000
 sip.ws.local.port.min=6666
 sip.ws.local.port.max=7666
 ## 127.0.0.1 is NOT working here
-sip.ws.local.host=
+sip.ws.local.host=192.168.1.211
 sip.ws.remote.port=8088
 sip.ws.remote.user=omsip_user
 sip.ws.remote.password=12345
diff --git a/openmeetings-web/src/main/webapp/css/raw-activities.css b/openmeetings-web/src/main/webapp/css/raw-activities.css
index 681a59d..8198104 100644
--- a/openmeetings-web/src/main/webapp/css/raw-activities.css
+++ b/openmeetings-web/src/main/webapp/css/raw-activities.css
@@ -26,7 +26,7 @@
 	position: relative;
 	padding: 5px;
 	margin-bottom: 3px;
-	border-bottom: 1px solid var(--secondary);
+	border-bottom: 1px solid var(--bs-secondary);
 }
 .activity.item button {
 	padding: 0 5px;
diff --git a/openmeetings-web/src/main/webapp/css/raw-admin.css b/openmeetings-web/src/main/webapp/css/raw-admin.css
index b3918be..2691a26 100644
--- a/openmeetings-web/src/main/webapp/css/raw-admin.css
+++ b/openmeetings-web/src/main/webapp/css/raw-admin.css
@@ -88,11 +88,11 @@
 }
 .onoff-checkbox + .onoff-label::before {
 	content: '\f204';
-	color: var(--danger);
+	color: var(--bs-danger);
 }
 .onoff-checkbox:checked + .onoff-label::before {
 	content: '\f205';
-	color: var(--success);
+	color: var(--bs-success);
 }
 .addLanguagePanel select {
 	padding: 0px 0px;
diff --git a/openmeetings-web/src/main/webapp/css/raw-chat.css b/openmeetings-web/src/main/webapp/css/raw-chat.css
index a2f3c9e..bfaf9c2 100644
--- a/openmeetings-web/src/main/webapp/css/raw-chat.css
+++ b/openmeetings-web/src/main/webapp/css/raw-chat.css
@@ -53,7 +53,7 @@
 	content: "\f104";
 }
 #chat .messageArea .msg-row.need-moderation {
-	background-color: var(--warning);
+	background-color: var(--bs-warning);
 }
 #chat .messageArea .time {
 	margin-right: 5px;
diff --git a/openmeetings-web/src/main/webapp/css/raw-general.css b/openmeetings-web/src/main/webapp/css/raw-general.css
index e05380f..35d38d8 100644
--- a/openmeetings-web/src/main/webapp/css/raw-general.css
+++ b/openmeetings-web/src/main/webapp/css/raw-general.css
@@ -215,7 +215,7 @@ html, body {
 .om-icon::before {
 	font-family: 'Font Awesome 5 Free';
 	font-weight: 900;
-	color: var(--secondary);
+	color: var(--bs-secondary);
 	font-size: 1.2em;
 	vertical-align: text-bottom;
 	line-height: 1em;
@@ -228,11 +228,11 @@ html, body {
 	content: '\f055';
 }
 .online.om-icon::before {
-	color: var(--success);
+	color: var(--bs-success);
 	content: '\f111';
 }
 .offline.om-icon::before {
-	color: var(--danger);
+	color: var(--bs-danger);
 	content: '\f111';
 }
 .message {
@@ -294,7 +294,7 @@ table.messages td.from, table.messages td.subject {
 }
 .email.selected {
 	border: 1px solid #cccccc;
-	background-color:var(--light);
+	background-color:var(--bs-light);
 }
 .email.folder {
 	font-weight: normal;
@@ -608,7 +608,7 @@ select.messages.selector {
 }
 .dragbox .dragbox-header .dragbox-actions .icon.delete::before {
 	content: "\f00d";
-	color: var(--danger);
+	color: var(--bs-danger);
 }
 .dragbox-content .tableWrapper {
 	/* room users on dashboard */
@@ -620,6 +620,7 @@ select.messages.selector {
 }
 .sort-icon a {
 	vertical-align: middle;
+	text-decoration: none;
 }
 .sort-icon.none a::before {
 	content: '\f0dc';
diff --git a/openmeetings-web/src/main/webapp/css/raw-menu.css b/openmeetings-web/src/main/webapp/css/raw-menu.css
index 42b6459..70c4a6b 100644
--- a/openmeetings-web/src/main/webapp/css/raw-menu.css
+++ b/openmeetings-web/src/main/webapp/css/raw-menu.css
@@ -23,7 +23,7 @@
 	font-weight: bold;
 }
 .room-block .menu .details .room.name.screen {
-	color: var(--danger);
+	color: var(--bs-danger);
 }
 .room-block .menu .details .icon {
 	width: 30px;
@@ -49,7 +49,7 @@
 .room-block .menu .details .detail-btn i.add-on {
 	position: absolute;
 	left: 5px;
-	color: var(--warning);
+	color: var(--bs-warning);
 	bottom:  0;
 }
 .room-block .menu .details .icon .profile {
diff --git a/openmeetings-web/src/main/webapp/css/raw-nettest.css b/openmeetings-web/src/main/webapp/css/raw-nettest.css
index 3360489..ee11cba 100644
--- a/openmeetings-web/src/main/webapp/css/raw-nettest.css
+++ b/openmeetings-web/src/main/webapp/css/raw-nettest.css
@@ -15,24 +15,24 @@
 .nettest .test-container button.not-started
 , .nettest .test-container button.started
 {
-	color: var(--secondary);
-	border-color: var(--secondary);
+	color: var(--bs-secondary);
+	border-color: var(--bs-secondary);
 }
 .nettest .test-container button:hover {
-	color: var(--white);
+	color: var(--bs-white);
 	border-color: transparent;
 }
 .nettest .test-container button.not-started:hover
 , .nettest .test-container button.started:hover
 {
-	background-color: var(--secondary);
+	background-color: var(--bs-secondary);
 }
 .nettest .test-container button.complete {
-	color: var(--success);
-	border-color: var(--success);
+	color: var(--bs-success);
+	border-color: var(--bs-success);
 }
 .nettest .test-container button.complete:hover {
-	background-color: var(--success);
+	background-color: var(--bs-success);
 }
 .nettest .test-container button.not-started i::before {
 	content: '\f04b';
@@ -46,6 +46,12 @@
 .nettest .test-container button.complete i::before {
 	content: '\f00c';
 }
+.nettest .test-container .value {
+	min-height: 3em;
+}
+.nettest .test-container .card-title {
+	white-space: nowrap;
+}
 .nettest .output {
 	border-radius: 10px;
 	border: 1px solid #cccccc;
diff --git a/openmeetings-web/src/main/webapp/css/raw-room.css b/openmeetings-web/src/main/webapp/css/raw-room.css
index 110aa8c..44a5398 100644
--- a/openmeetings-web/src/main/webapp/css/raw-room.css
+++ b/openmeetings-web/src/main/webapp/css/raw-room.css
@@ -108,13 +108,13 @@ html[dir="rtl"] .room-block .sb-wb .sidebar {
 	border-radius: 50%;
 }
 .room-block .sb-wb .sidebar .user-list .user.entry .om-icon.user-status.user {
-	background-color: var(--success);
+	background-color: var(--bs-success);
 }
 .room-block .sb-wb .sidebar .user-list .user.entry .om-icon.user-status.wb {
-	background-color: var(--warning);
+	background-color: var(--bs-warning);
 }
 .room-block .sb-wb .sidebar .user-list .user.entry .om-icon.user-status.mod {
-	background-color: var(--danger);
+	background-color: var(--bs-danger);
 }
 .room-block .sb-wb .sidebar .user-list .user.entry .om-icon.audio-activity {
 	position: absolute;
@@ -170,8 +170,8 @@ html[dir="rtl"] .room-block .sb-wb .sidebar {
 .audio-activity.om-icon {
 	opacity: 0.2;
 	border-radius: 50%;
-	background-color: var(--success);
-	border: 1px solid var(--gray-dark);
+	background-color: var(--bs-success);
+	border: 1px solid var(--bs-gray-dark);
 }
 .typing-activity {
 	display: none;
@@ -182,7 +182,7 @@ html[dir="rtl"] .room-block .sb-wb .sidebar {
 	position: absolute;
 	left: 0;
 	animation: typing-ani 2s infinite;
-	color: var(--primary);
+	color: var(--bs-primary);
 }
 @keyframes typing-ani {
 	0% {
@@ -207,12 +207,12 @@ html[dir="rtl"] .room-block .sb-wb .sidebar {
 .om-icon.volume-control a.volume-on::before {
 	content: "\f027";
 	font-size: 1.2em;
-	color: var(--secondary);
+	color: var(--bs-secondary);
 }
 .om-icon.volume-control a.volume-off::before {
 	content: "\f6a9";
 	font-size: 1.2em;
-	color: var(--danger);
+	color: var(--bs-danger);
 }
 .om-icon.volume-control .dropdown-menu {
 	width: 20px;
@@ -225,17 +225,17 @@ html[dir="rtl"] .room-block .sb-wb .sidebar {
 .om-icon.volume-control .dropdown-menu .slider {
 	border-radius: 0;
 	background-color: white;
-	border-color: var(--secondary);
+	border-color: var(--bs-secondary);
 }
 .om-icon.volume-control .dropdown-menu .slider .ui-slider-range {
 	border-radius: 0;
-	background-color: var(--light);
+	background-color: var(--bs-light);
 }
 .om-icon.volume-control .dropdown-menu .slider .handle {
 	border-radius: 0;
-	background-color: var(--light);
-	border-color: var(--secondary);
-	color: var(--secondary);
+	background-color: var(--bs-light);
+	border-color: var(--bs-secondary);
+	color: var(--bs-secondary);
 }
 .user-video .om-icon.volume-control
 , .user-video .btn.btn-refresh
@@ -247,7 +247,7 @@ html[dir="rtl"] .room-block .sb-wb .sidebar {
 }
 .user-video .om-icon.volume-control {
 	border-radius: 0.2rem;
-	border: 1px solid var(--secondary);
+	border: 1px solid var(--bs-secondary);
 	margin-top: 3px;
 	padding: 1px;
 }
@@ -273,11 +273,11 @@ html[dir="rtl"] .room-block .sb-wb .sidebar {
 	font-size: .6em;
 }
 .right.om-icon i::before {
-	color: var(--success);
+	color: var(--bs-success);
 	content: "\f055";
 }
 .right.om-icon.granted i::before {
-	color: var(--danger);
+	color: var(--bs-danger);
 	content: "\f056";
 }
 .right.moderator.om-icon::before {
@@ -312,18 +312,18 @@ html[dir="rtl"] .room-block .sb-wb .sidebar {
 }
 .activity.cam.enabled.om-icon::before {
 	content: '\f03d';
-	color: var(--success);
+	color: var(--bs-success);
 }
 .activity.cam.om-icon, .activity.mic.om-icon {
 	display: none;
 }
 .activity.cam.om-icon::before {
 	content: '\f4e2';
-	color: var(--warning);
+	color: var(--bs-warning);
 }
 .activity.mic.enabled.om-icon::before {
 	content: '\f130';
-	color: var(--success);
+	color: var(--bs-success);
 }
 .om-icon.disabled {
 	filter: grayscale(100%);
@@ -332,11 +332,11 @@ html[dir="rtl"] .room-block .sb-wb .sidebar {
 }
 .activity.mic.om-icon::before {
 	content: '\f131';
-	color: var(--warning);
+	color: var(--bs-warning);
 }
 .room-block .sb-wb .sidebar .user-list .user.entry.current {
 	font-weight: bold;
-	background-color: var(--light);
+	background-color: var(--bs-light);
 }
 .dropdown-menu.video.volume, .dropdown-menu.video.volume li {
 	width: 20px;
@@ -404,7 +404,7 @@ html[dir="rtl"] .room-block .sb-wb .sidebar {
 
 /************ VIDEO **************/
 .mic-on {
-	background-color: var(--warning);
+	background-color: var(--bs-warning);
 }
 .ui-dialog.video
 , .ui-dialog.sharer
@@ -417,14 +417,14 @@ html[dir="rtl"] .room-block .sb-wb .sidebar {
 , .sharer .ui-dialog-titlebar
 , .wb-tool-settings .ui-dialog-titlebar
 {
-	background-color: var(--white);
+	background-color: var(--bs-white);
 }
 .sharer .ui-dialog-titlebar-close {
 	position: absolute;
 	top: 20px
 }
 .user-video .buttonpane {
-	background-color: var(--white);
+	background-color: var(--bs-white);
 	position: absolute;
 	right: 2px;
 	top: 2px
@@ -524,7 +524,7 @@ html[dir="rtl"] .room-block .sb-wb .sidebar {
 	right: -21px;
 	bottom: -16px;
 	background: repeating-linear-gradient(
-		var(--dark), var(--dark) 3px, transparent 3px, transparent 5px
+		var(--bs-dark), var(--bs-dark) 3px, transparent 3px, transparent 5px
 	);
 }
 .room-block .room-container .user-video .header {
@@ -664,7 +664,7 @@ html[dir="rtl"] .room-block .sb-wb .sidebar {
 	right: 40px;
 	bottom: 40px;
 	padding: 5px;
-	background-color: var(--info);
+	background-color: var(--bs-info);
 }
 #quick-vote .control {
 	display: inline-block;
@@ -685,10 +685,10 @@ html[dir="rtl"] .room-block .sb-wb .sidebar {
 	line-height: 1.2em;
 }
 #quick-vote .control.pro i::before {
-	color: var(--success);
+	color: var(--bs-success);
 }
 #quick-vote .control.con i::before {
-	color: var(--danger);
+	color: var(--bs-danger);
 }
 #quick-vote .close-btn {
 	float: right;
@@ -744,7 +744,7 @@ html[dir="rtl"] .room-block .sb-wb .sidebar {
 }
 .video .mute-others::before {
 	content: '\f3c9';
-	color: var(--warning);
+	color: var(--bs-warning);
 	line-height: 1em;
 	font-size: 2.5em;
 }
diff --git a/openmeetings-web/src/main/webapp/css/raw-tree.css b/openmeetings-web/src/main/webapp/css/raw-tree.css
index 8d61614..d30cdae 100644
--- a/openmeetings-web/src/main/webapp/css/raw-tree.css
+++ b/openmeetings-web/src/main/webapp/css/raw-tree.css
@@ -53,18 +53,17 @@
 	line-height: 20px;
 	color: transparent;
 	height: var(--tree-header-height);
-	padding-top: 3px;
 	overflow: hidden;
 }
 .trash-toolbar .om-confirm-dialog {
-	color: var(--danger);
+	color: var(--bs-danger);
 }
 .trash-toolbar .om-icon.fileitem, .trash-toolbar .om-icon.recorditem {
 	display: none !important;
 }
 .trash-toolbar-hover {
 	color: inherit;
-	background-color: var(--light);
+	background-color: var(--bs-light);
 }
 .file-tree .info .details {
 	width: 100%;
@@ -99,8 +98,11 @@
 .trees .tree-node {
 	white-space: nowrap;
 }
+.trees .tree-node .tree-junction {
+	text-decoration: none;
+}
 .file-tree .trees .om-icon.active {
-	background-color: var(--info);
+	background-color: var(--bs-info);
 }
 .file-tree .trees .om-icon i {
 	display: none;
@@ -125,7 +127,7 @@
 	content: '\f008';
 }
 .broken.om-icon::before {
-	color: var(--danger);
+	color: var(--bs-danger);
 }
 .file-tree .trees .processing.om-icon i {
 	display: block;
@@ -192,7 +194,7 @@
 	padding: 0px;
 }
 .file.item .errors::before {
-	color: var(--warning);
+	color: var(--bs-warning);
 	content: '\f071';
 }
 .dialog.errors {
@@ -204,10 +206,10 @@
 	height: calc(100% - 50px);
 }
 .dialog.errors .alert {
-	color: var(--danger);
+	color: var(--bs-danger);
 }
 .dialog.errors .warn {
-	color: var(--warning);
+	color: var(--bs-warning);
 }
 .dialog.errors .message {
 	display: block;
diff --git a/openmeetings-web/src/main/webapp/css/raw-wb.css b/openmeetings-web/src/main/webapp/css/raw-wb.css
index 4dafebb..cbc49fd 100644
--- a/openmeetings-web/src/main/webapp/css/raw-wb.css
+++ b/openmeetings-web/src/main/webapp/css/raw-wb.css
@@ -36,7 +36,7 @@ html[dir="rtl"] .room-block .sb-wb .wb-block {
 	display: inline-block;
 	width: 100%;
 	text-align: center;
-	color: var(--success);
+	color: var(--bs-success);
 }
 .room-block .sb-wb .wb-block .tabs {
 	height: calc(100% - var(--buffer-size));

[openmeetings] 01/02: Merge branch 'master' into bootstrap-5

Posted by so...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 612551b1be2577c87fa3e6ed5db78cce275647dd
Merge: b13bf82 e3e2402
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Sat Jul 10 11:50:20 2021 +0700

    Merge branch 'master' into bootstrap-5

 openmeetings-server/pom.xml |  2 +-
 pom.xml                     | 10 +++++-----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --cc pom.xml
index 0ce30fe,60cb0b1..c7ea575
--- a/pom.xml
+++ b/pom.xml
@@@ -78,13 -78,13 +78,13 @@@
  		<frontend-maven-plugin.version>1.11.0</frontend-maven-plugin.version>
  		<!-- dependency versions -->
  		<junit.version>5.7.1</junit.version>
- 		<wicket.version>9.3.0</wicket.version>
+ 		<wicket.version>9.4.0</wicket.version>
  		<wicket-jquery-ui.version>9.3.2</wicket-jquery-ui.version>
  		<wicketstuff.version>9.3.0</wicketstuff.version>
 -		<wicket-bootstrap.version>5.0.5</wicket-bootstrap.version>
 +		<wicket-bootstrap.version>6.0.0-SNAPSHOT</wicket-bootstrap.version>
  		<font-awesome.version>5.15.3</font-awesome.version>
  		<spring.version>5.3.8</spring.version>
- 		<tomcat.version>9.0.48</tomcat.version>
+ 		<tomcat.version>9.0.50</tomcat.version>
  		<ical4j.version>3.0.21</ical4j.version>
  		<cxf.version>3.4.4</cxf.version>
  		<io.prometheus.version>0.11.0</io.prometheus.version>