You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2020/02/12 16:30:48 UTC

[openmeetings] branch csp updated: [OPENMEETINGS-2165] java based confirmations seems to be converted

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

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


The following commit(s) were added to refs/heads/csp by this push:
     new 2474e0b  [OPENMEETINGS-2165] java based confirmations seems to be converted
2474e0b is described below

commit 2474e0bd8a0101f9db46ba25e9dd34e96d5abb89
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Wed Feb 12 23:30:29 2020 +0700

    [OPENMEETINGS-2165] java based confirmations seems to be converted
---
 .../openmeetings/web/admin/AdminActionsPanel.html  |   2 +-
 .../openmeetings/web/admin/AdminActionsPanel.java  |  28 +---
 .../openmeetings/web/admin/email/EmailForm.java    |   9 +-
 .../openmeetings/web/admin/email/EmailPanel.html   |   2 +-
 .../web/admin/labels/AddLanguageDialog.java        |   1 -
 .../openmeetings/web/admin/labels/LabelsForm.java  |   6 -
 .../openmeetings/web/admin/labels/LangPanel.html   |  11 --
 .../openmeetings/web/admin/labels/LangPanel.java   |  14 --
 .../openmeetings/web/common/FormActionsPanel.java  |  30 +---
 .../common/confirmation/ConfirmableAjaxBorder.html |   2 +-
 .../common/confirmation/ConfirmableAjaxBorder.java | 183 ++++++---------------
 .../common/confirmation/ConfirmationDialog.java    |  41 ++++-
 .../web/common/tree/FileTreePanel.java             |  48 ++++--
 .../openmeetings/web/common/tree/FolderPanel.java  |   4 +-
 .../openmeetings/web/common/tree/filetree.js       |  31 ++--
 .../web/room/sidebar/RoomFilePanel.java            |   5 +-
 .../openmeetings/web/room/sidebar/RoomSidebar.html |   1 -
 .../openmeetings/web/room/sidebar/RoomSidebar.java |  19 +--
 .../web/user/profile/InvitationDetails.java        |  25 +--
 .../web/user/profile/InvitationsPanel.html         |   4 +-
 .../web/user/record/RecordingsPanel.java           |   2 +-
 openmeetings-web/src/main/webapp/css/raw-tree.css  |   3 +
 22 files changed, 186 insertions(+), 285 deletions(-)

diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminActionsPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminActionsPanel.html
index 4124e6c..8ade455 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminActionsPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminActionsPanel.html
@@ -24,7 +24,7 @@
 	<div class="btn btn-outline-primary btn-sm" wicket:id="btn-new" wicket:message="title:155">
 		<i class="fas fa-plus"></i>
 	</div>
-	<div class="btn btn-outline-warning btn-sm" wicket:id="btn-delete" wicket:message="title:157,data-original-title:157">
+	<div class="btn btn-outline-warning btn-sm" wicket:id="btn-delete" wicket:message="title:157">
 		<i class="fas fa-times"></i>
 	</div>
 	<div class="btn btn-outline-success btn-sm" wicket:id="btn-restore" wicket:message="title:admin.restore">
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 400f6f3..5c36a26 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
@@ -22,6 +22,7 @@ import static org.apache.openmeetings.web.util.CallbackFunctionHelper.newOkCance
 
 import org.apache.openmeetings.web.common.FormActionsPanel;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
@@ -31,8 +32,8 @@ public abstract class AdminActionsPanel<T> extends FormActionsPanel<T> {
 	private static final long serialVersionUID = 1L;
 	private final Label newRecord = new Label("newRecord", Model.of(""));
 	private final Form<T> form;
-	private AjaxButton delBtn;
-	private AjaxButton restoreBtn;
+	private AjaxLink<Void> delBtn;
+	private AjaxLink<Void> restoreBtn;
 
 	public AdminActionsPanel(String id, final Form<T> form) {
 		super(id, form);
@@ -67,43 +68,28 @@ public abstract class AdminActionsPanel<T> extends FormActionsPanel<T> {
 		final Form<?> cForm = new Form<>("form");
 		cForm.setMultiPart(form.isMultiPart());
 		add(cForm);
-		delBtn = new AjaxButton("btn-delete", cForm) {
+		delBtn = new AjaxLink<>("btn-delete") {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void onSubmit(AjaxRequestTarget target) {
+			public void onClick(AjaxRequestTarget target) {
 				// repaint the feedback panel so that it is hidden
 				target.add(feedback);
 				setNewVisible(false);
 				onDeleteSubmit(target, form);
 			}
-
-			@Override
-			protected void onError(AjaxRequestTarget target) {
-				// repaint the feedback panel so errors are shown
-				target.add(feedback);
-				setNewVisible(false);
-				AdminActionsPanel.this.onError(target, form);
-			}
 		};
 		delBtn.add(newOkCancelDangerConfirm(this, getString("833")));
-		restoreBtn = new AjaxButton("btn-restore", form) {
+		restoreBtn = new AjaxLink<>("btn-restore") {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void onSubmit(AjaxRequestTarget target) {
+			public void onClick(AjaxRequestTarget target) {
 				// repaint the feedback panel so that it is hidden
 				target.add(feedback);
 				setNewVisible(false);
 				onRestoreSubmit(target, form);
 			}
-
-			@Override
-			protected void onError(AjaxRequestTarget target) {
-				// repaint the feedback panel so errors are shown
-				target.add(feedback);
-				AdminActionsPanel.this.onError(target, form);
-			}
 		};
 		add(newBtn, delBtn
 				, restoreBtn.setOutputMarkupPlaceholderTag(true).setVisible(false));
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 cccb431..48c6509 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
@@ -24,7 +24,7 @@ import org.apache.openmeetings.db.dao.basic.MailMessageDao;
 import org.apache.openmeetings.db.entity.basic.MailMessage;
 import org.apache.openmeetings.web.util.DateLabel;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
@@ -40,7 +40,7 @@ public class EmailForm extends Form<MailMessage> {
 	private static final long serialVersionUID = 1L;
 	private final Label status = new Label("status", Model.of(""));
 	private BootstrapAjaxButton reset;
-	private AjaxButton delBtn;
+	private AjaxLink<Void> delBtn;
 	private final WebMarkupContainer list;
 	@SpringBean
 	private MailMessageDao emailDao;
@@ -72,11 +72,10 @@ public class EmailForm extends Form<MailMessage> {
 		});
 		reset.setEnabled(false);
 		// add a cancel button that can be used to submit the form via ajax
-		delBtn = new AjaxButton("btn-delete", this) {
+		delBtn = new AjaxLink<>("btn-delete") {
 			private static final long serialVersionUID = 1L;
 
-			@Override
-			protected void onSubmit(AjaxRequestTarget target) {
+			public void onClick(AjaxRequestTarget target) {
 				emailDao.delete(EmailForm.this.getModelObject().getId());
 				EmailForm.this.setModelObject(new MailMessage());
 				target.add(list, EmailForm.this);
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 de64b20..d1baa66 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
@@ -43,7 +43,7 @@
 	<div class="adminPanelColumnForm">
 		<form wicket:id="form" class="adminForm">
 			<div class="actions ui-widget-header">
-				<div class="btn btn-outline-warning btn-sm" wicket:id="btn-delete" wicket:message="title:157,data-original-title:157">
+				<div class="btn btn-outline-warning btn-sm" wicket:id="btn-delete" wicket:message="title:157">
 					<i class="fas fa-times"></i>
 				</div>
 			</div>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/AddLanguageDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/AddLanguageDialog.java
index c4d2586..8dab3c2 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/AddLanguageDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/AddLanguageDialog.java
@@ -53,7 +53,6 @@ public class AddLanguageDialog extends Modal<String> {
 	@Override
 	protected void onInitialize() {
 		header(new ResourceModel("362"));
-		setCloseOnEscapeKey(true);
 		setBackdrop(Backdrop.STATIC);
 
 		addButton(new BootstrapAjaxButton("button", new ResourceModel("366"), form, Buttons.Type.Outline_Primary) {
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LabelsForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LabelsForm.java
index 5e84da9..5fc834e 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LabelsForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LabelsForm.java
@@ -18,8 +18,6 @@
  */
 package org.apache.openmeetings.web.admin.labels;
 
-import static org.apache.openmeetings.web.admin.labels.LangPanel.reinitJs;
-
 import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.entity.label.StringLabel;
 import org.apache.openmeetings.web.admin.AdminBaseForm;
@@ -57,14 +55,12 @@ public class LabelsForm extends AdminBaseForm<StringLabel> {
 		value = null;
 		setModelObject(new StringLabel(key, value));
 		target.add(this);
-		reinitJs(target);
 	}
 
 	@Override
 	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
 		this.setModelObject(new StringLabel(key, value));
 		target.add(this);
-		reinitJs(target);
 	}
 
 	@Override
@@ -76,7 +72,6 @@ public class LabelsForm extends AdminBaseForm<StringLabel> {
 		}
 		setNewVisible(false);
 		target.add(panel.listContainer);
-		reinitJs(target);
 	}
 
 	@Override
@@ -87,6 +82,5 @@ public class LabelsForm extends AdminBaseForm<StringLabel> {
 			error("Unexpected error while deleting label:" + e.getMessage());
 		}
 		target.add(panel.listContainer);
-		reinitJs(target);
 	}
 }
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 e275aa9..7197bfd 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
@@ -20,17 +20,6 @@
 -->
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org">
-<wicket:head>
-	<script type="text/javascript">
-		function langPanelInit() {
-			$('#addLanguage').dialog({
-				closeOnEscape: true
-				, autoOpen: false
-				, resizable: false
-			});
-		};
-	</script>
-</wicket:head>
 <wicket:extend>
 	<div wicket:id="feedback"></div>
 	<div class="adminPanelColumnTable label">
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 1fc8087..cdb6f5e 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
@@ -35,7 +35,6 @@ import org.apache.openmeetings.db.entity.label.StringLabel;
 import org.apache.openmeetings.web.admin.AdminBasePanel;
 import org.apache.openmeetings.web.admin.SearchableDataView;
 import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.common.BasePanel;
 import org.apache.openmeetings.web.common.PagedEntityListPanel;
 import org.apache.openmeetings.web.data.DataViewContainer;
 import org.apache.openmeetings.web.data.OmOrderByBorder;
@@ -47,7 +46,6 @@ import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
-import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.extensions.ajax.AjaxDownloadBehavior;
 import org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadProgressBar;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -129,7 +127,6 @@ public class LangPanel extends AdminBasePanel {
 						form.setModelObject(fv);
 						form.setNewVisible(false);
 						target.add(form, listContainer);
-						reinitJs(target);
 					}
 				});
 				item.add(AttributeModifier.append(ATTR_CLASS, getRowClass(fv.getId(), form.getModelObject().getId())));
@@ -256,17 +253,6 @@ public class LangPanel extends AdminBasePanel {
 		super.onInitialize();
 	}
 
-	@Override
-	public BasePanel onMenuPanelLoad(IPartialPageRequestHandler handler) {
-		reinitJs(handler);
-		super.onMenuPanelLoad(handler);
-		return this;
-	}
-
-	static void reinitJs(IPartialPageRequestHandler handler) {
-		handler.appendJavaScript("langPanelInit()");
-	}
-
 	public LangForm getLangForm() {
 		return langForm;
 	}
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 4706743..56a7783 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,8 +18,10 @@
  */
 package org.apache.openmeetings.web.common;
 
-import org.apache.openmeetings.web.common.confirmation.ConfirmableAjaxBorder;
+import static org.apache.openmeetings.web.util.CallbackFunctionHelper.newOkCancelDangerConfirm;
+
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.panel.Panel;
@@ -31,7 +33,7 @@ public abstract class FormActionsPanel<T> extends Panel {
 	private final Form<T> form;
 	protected final NotificationPanel feedback = new NotificationPanel("feedback");
 	private AjaxButton saveBtn;
-	private ConfirmableAjaxBorder purgeBtn;
+	private AjaxLink<Void> purgeBtn;
 
 	public FormActionsPanel(String id, Form<T> form) {
 		super(id);
@@ -63,43 +65,29 @@ public abstract class FormActionsPanel<T> extends Panel {
 		});
 
 		// add a refresh button that can be used to submit the form via ajax
-		add(new AjaxButton("btn-refresh", form) {
+		add(new AjaxLink<Void>("btn-refresh") {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void onSubmit(AjaxRequestTarget target) {
+			public void onClick(AjaxRequestTarget target) {
 				// repaint the feedback panel so that it is hidden
 				target.add(feedback);
 				setNewVisible(false);
 				onRefreshSubmit(target, form);
 			}
-
-			@Override
-			protected void onError(AjaxRequestTarget target) {
-				// repaint the feedback panel so errors are shown
-				target.add(feedback);
-				setNewVisible(false);
-				FormActionsPanel.this.onError(target, form);
-			}
 		});
-		purgeBtn = new ConfirmableAjaxBorder("btn-purge", getString("admin.purge"), getString("admin.purge.desc"), form, null, false) {
+		purgeBtn = new AjaxLink<>("btn-purge") {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void onSubmit(AjaxRequestTarget target) {
+			public void onClick(AjaxRequestTarget target) {
 				// repaint the feedback panel so that it is hidden
 				target.add(feedback);
 				setNewVisible(false);
 				onPurgeSubmit(target, form);
 			}
-
-			@Override
-			protected void onError(AjaxRequestTarget target) {
-				// repaint the feedback panel so errors are shown
-				target.add(feedback);
-				FormActionsPanel.this.onError(target, form);
-			}
 		};
+		purgeBtn.add(newOkCancelDangerConfirm(this, getString("admin.purge.desc")));
 		add(purgeBtn.setOutputMarkupPlaceholderTag(true).setVisible(false));
 		super.onInitialize();
 	}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmableAjaxBorder.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmableAjaxBorder.html
index 2526366..e1325f5 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmableAjaxBorder.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmableAjaxBorder.html
@@ -22,6 +22,6 @@
 <html xmlns:wicket="http://wicket.apache.org">
 <wicket:border>
 	<wicket:body/>
-	<form wicket:id="form" class="d-inline"><div wicket:id="dialog"></div></form>
+	<div wicket:id="dialog"></div>
 </wicket:border>
 </html>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmableAjaxBorder.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmableAjaxBorder.java
index f48f701..dab2c01 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmableAjaxBorder.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmableAjaxBorder.java
@@ -23,105 +23,72 @@ import static org.apache.openmeetings.web.common.BasePanel.EVT_CLICK;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
-import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
 import org.apache.wicket.markup.html.border.Border;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.panel.EmptyPanel;
-import org.apache.wicket.model.Model;
-import org.danekja.java.util.function.serializable.SerializableConsumer;
-
-import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
-import com.googlecode.wicket.jquery.ui.widget.dialog.MessageFormDialog;
+import org.apache.wicket.model.IModel;
 
 public abstract class ConfirmableAjaxBorder extends Border {
 	private static final long serialVersionUID = 1L;
-	private static final String DIALOG_ID = "dialog";
-	protected final Form<?> form = new Form<>("form");
-	protected final Form<?> userForm;
-	private final ConfirmableBorderDialog dialog;
-	private boolean validate = false;
-
-	public ConfirmableAjaxBorder(String id, String title, String message) {
-		this(id, title, message, null, null);
-	}
-
-	public ConfirmableAjaxBorder(String id, String title, String message, Form<?> form) {
-		this(id, title, message, form, null);
-	}
-
-	public ConfirmableAjaxBorder(String id, String title, String message, ConfirmableBorderDialog dialog) {
-		this(id, title, message, null, dialog);
-	}
-
-	public ConfirmableAjaxBorder(String id, String title, String message, Form<?> userForm, ConfirmableBorderDialog dialog) {
-		this(id, title, message, userForm, dialog, false);
+	private final IModel<String> title;
+	private final IModel<String> message;
+	private ConfirmationDialog dialog;
+
+	public ConfirmableAjaxBorder(String id, IModel<String> title, IModel<String> message) {
+		super(id);
+		this.title = title;
+		this.message = message;
+		setOutputMarkupId(true);
 	}
 
-	public ConfirmableAjaxBorder(String id, String title, String message, Form<?> userForm, ConfirmableBorderDialog dialog, boolean validate) {
-		super(id, Model.of(message));
+	private ConfirmationDialog getDialog() {
 		if (dialog == null) {
-			this.dialog = new ConfirmableBorderDialog(DIALOG_ID, title, message, userForm == null ? form : userForm);
-			form.add(this.dialog);
-		} else {
-			this.dialog = dialog;
-			form.add(new EmptyPanel(DIALOG_ID));
-		}
-		this.userForm = userForm;
-		this.validate = validate;
-		this.dialog.setSubmitHandler(this::onSubmit);
-		this.dialog.setErrorHandler(this::onError);
-		setOutputMarkupId(true);
-	}
+			dialog = new ConfirmationDialog("dialog", title, message) {
+				private static final long serialVersionUID = 1L;
 
-	public AbstractFormDialog<?> getDialog() {
+				@Override
+				protected void onConfirm(AjaxRequestTarget target) {
+					ConfirmableAjaxBorder.this.onConfirm(target);
+				}
+			};
+		}
 		return dialog;
 	}
 
 	@Override
 	protected void onInitialize() {
 		super.onInitialize();
-		if (validate) {
-			add(new AjaxFormSubmitBehavior(EVT_CLICK) {
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				protected void onSubmit(AjaxRequestTarget target) {
-					dialog.open(target);
-				}
-
-				@Override
-				protected void onError(AjaxRequestTarget target) {
-					ConfirmableAjaxBorder.this.onError(target);
-				}
-			});
-		} else {
-			add(new AjaxEventBehavior(EVT_CLICK) {
-				private static final long serialVersionUID = 1L;
+		add(new AjaxEventBehavior(EVT_CLICK) {
+			private static final long serialVersionUID = 1L;
 
-				@Override
-				protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
-					super.updateAjaxAttributes(attributes);
-					ConfirmableAjaxBorder.this.updateAjaxAttributes(attributes);
-				}
+			@Override
+			protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
+				super.updateAjaxAttributes(attributes);
+				ConfirmableAjaxBorder.this.updateAjaxAttributes(attributes);
+			}
 
-				@Override
-				protected void onEvent(AjaxRequestTarget target) {
-					if (isClickable()) {
-						dialog.open(target);
-					}
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				if (isClickable()) {
+					getDialog().show(target);
 				}
-			});
-		}
-		addToBorder(form);
+			}
+		});
+		addToBorder(getDialog());
 	}
 
 	protected boolean isClickable() {
 		return true;
 	}
 
+	public ConfirmableAjaxBorder setTitle(IModel<String> title) {
+		getDialog().header(title);
+		return this;
+	}
+
+	public ConfirmableAjaxBorder setMessage(IModel<String> message) {
+		getDialog().setModel(message);
+		return this;
+	}
+
 	/**
 	 * Gives a chance to the specializations to modify the attributes.
 	 *
@@ -131,15 +98,7 @@ public abstract class ConfirmableAjaxBorder extends Border {
 	}
 
 	protected void onEvent(AjaxRequestTarget target) {
-		dialog.open(target);
-	}
-
-	/**
-	 * Triggered when the form is submitted, but the validation failed
-	 *
-	 * @param target - the {@link AjaxRequestTarget}
-	 */
-	protected void onError(AjaxRequestTarget target) {
+		getDialog().show(target);
 	}
 
 	/**
@@ -147,54 +106,12 @@ public abstract class ConfirmableAjaxBorder extends Border {
 	 *
 	 * @param target - the {@link AjaxRequestTarget}
 	 */
-	protected abstract void onSubmit(AjaxRequestTarget target);
-
-	public static class ConfirmableBorderDialog extends MessageFormDialog {
-		private static final long serialVersionUID = 1L;
-		private Form<?> form;
-		private SerializableConsumer<AjaxRequestTarget> submitHandler = null;
-		private SerializableConsumer<AjaxRequestTarget> errorHandler = null;
-
-		public ConfirmableBorderDialog(String id, String title, String message) {
-			this(id, title, message, null);
-		}
-
-		public ConfirmableBorderDialog(String id, String title, String message, Form<?> form) {
-			super(id, title, message, DialogButtons.OK_CANCEL, DialogIcon.WARN);
-			this.form = form;
-		}
+	protected abstract void onConfirm(AjaxRequestTarget target);
 
-		public void setSubmitHandler(SerializableConsumer<AjaxRequestTarget> submitHandler) {
-			this.submitHandler = submitHandler;
-		}
-
-		public void setErrorHandler(SerializableConsumer<AjaxRequestTarget> errorHandler) {
-			this.errorHandler = errorHandler;
-		}
-
-		@Override
-		public DialogButton getSubmitButton() {
-			return this.findButton(OK);
-		}
-
-		@Override
-		public Form<?> getForm() {
-			return this.form;
-		}
-
-		@Override
-		protected void onError(AjaxRequestTarget target, DialogButton btn) {
-			super.close(target, null); // closes the dialog on error.
-			if (errorHandler != null) {
-				errorHandler.accept(target);
-			}
-		}
-
-		@Override
-		protected void onSubmit(AjaxRequestTarget target, DialogButton btn) {
-			if (submitHandler != null) {
-				submitHandler.accept(target);
-			}
-		}
+	@Override
+	protected void detachModel() {
+		super.detachModel();
+		title.detach();
+		message.detach();
 	}
 }
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationDialog.java
index 979a360..092dbfd 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationDialog.java
@@ -22,13 +22,17 @@ import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
 
+import de.agilecoders.wicket.core.markup.html.bootstrap.behavior.CssClassNameAppender;
 import de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxLink;
 import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.ModalCloseButton;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.TextContentModal;
+import de.agilecoders.wicket.core.markup.html.bootstrap.image.IconType;
+import de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesome5IconType;
 
 public abstract class ConfirmationDialog extends TextContentModal {
 	private static final long serialVersionUID = 1L;
+	private BootstrapAjaxLink<String> okButton;
 
 	public ConfirmationDialog(String id, IModel<String> title, IModel<String> model) {
 		super(id, model);
@@ -36,18 +40,37 @@ public abstract class ConfirmationDialog extends TextContentModal {
 		setBackdrop(Backdrop.STATIC);
 	}
 
+	private BootstrapAjaxLink<String> getOkButton() {
+		if (okButton == null) {
+			okButton = new BootstrapAjaxLink<>("button", null, Buttons.Type.Outline_Danger, new ResourceModel("54")) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				public void onClick(AjaxRequestTarget target) {
+					close(target);
+					onConfirm(target);
+				}
+			};
+			okButton.setIconType(FontAwesome5IconType.exclamation_triangle_s);
+		}
+		return okButton;
+	}
+
+	public ConfirmationDialog withOkType(Buttons.Type type) {
+		getOkButton().setType(type);
+		return this;
+	}
+
+	public ConfirmationDialog withOkIcon(IconType icon) {
+		getOkButton().setIconType(icon);
+		return this;
+	}
+
 	@Override
 	protected void onInitialize() {
 		super.onInitialize();
-		addButton(new BootstrapAjaxLink<>("button", null, Buttons.Type.Outline_Primary, new ResourceModel("54")) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void onClick(AjaxRequestTarget target) {
-				close(target);
-				onConfirm(target);
-			}
-		}); //send
+		add(new CssClassNameAppender("om-confirm-dialog"));
+		addButton(getOkButton());
 		addButton(new ModalCloseButton(new ResourceModel("lbl.cancel")).type(Buttons.Type.Outline_Secondary));
 	}
 
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
index 6879ff0..8e0b725 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
@@ -43,7 +43,6 @@ import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.web.common.NameDialog;
 import org.apache.openmeetings.web.common.confirmation.ConfirmableAjaxBorder;
-import org.apache.openmeetings.web.common.confirmation.ConfirmableAjaxBorder.ConfirmableBorderDialog;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxEventBehavior;
@@ -170,7 +169,6 @@ public abstract class FileTreePanel extends Panel {
 	};
 	private final Form<Void> form = new Form<>("form");
 	private final NameDialog addFolder;
-	private final ConfirmableBorderDialog trashConfirm;
 	private ConfirmableAjaxBorder trashBorder;
 	private final Long roomId;
 	private boolean readOnly = true;
@@ -188,11 +186,10 @@ public abstract class FileTreePanel extends Panel {
 	@SpringBean
 	private FileItemDao fileDao;
 
-	public FileTreePanel(String id, Long roomId, NameDialog addFolder, ConfirmableBorderDialog trashConfirm) {
+	public FileTreePanel(String id, Long roomId, NameDialog addFolder) {
 		super(id);
 		this.roomId = roomId;
 		this.addFolder = addFolder;
-		this.trashConfirm = trashConfirm;
 		final OmTreeProvider tp = new OmTreeProvider(roomId);
 		select(tp.getRoot(), null, false, false);
 		form.add(tree = new FileItemTree("tree", this, tp));
@@ -268,19 +265,7 @@ public abstract class FileTreePanel extends Panel {
 				update(target);
 			}
 		}));
-		trashToolbar.add(trashBorder = new ConfirmableAjaxBorder("trash", getString("80"), getString("713"), trashConfirm) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected boolean isClickable() {
-				return !readOnly && !selected.isEmpty();
-			}
-
-			@Override
-			protected void onSubmit(AjaxRequestTarget target) {
-				deleteAll(target);
-			}
-		});
+		trashToolbar.add(getTrashBorder());
 
 		form.add(trees.add(tree).setOutputMarkupId(true));
 		updateSizes();
@@ -289,6 +274,35 @@ public abstract class FileTreePanel extends Panel {
 		setReadOnly(false, null);
 	}
 
+	private ConfirmableAjaxBorder getTrashBorder() {
+		if (trashBorder == null) {
+			trashBorder = new ConfirmableAjaxBorder("trash", new ResourceModel("80"), new ResourceModel("713")) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected boolean isClickable() {
+					return !readOnly && !selected.isEmpty();
+				}
+
+				@Override
+				protected void onConfirm(AjaxRequestTarget target) {
+					deleteAll(target);
+				}
+			};
+		}
+		return trashBorder;
+	}
+
+	public FileTreePanel setBorderTitle(IModel<String> title) {
+		getTrashBorder().setTitle(title);
+		return this;
+	}
+
+	public FileTreePanel setBorderMessage(IModel<String> message) {
+		getTrashBorder().setMessage(message);
+		return this;
+	}
+
 	@Override
 	public void renderHead(IHeaderResponse response) {
 		super.renderHead(response);
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
index ec3461c..7b8b0c8 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
@@ -91,9 +91,9 @@ public class FolderPanel extends Panel implements IDraggableListener, IDroppable
 			add(new DraggableBehavior(
 					selector
 					, new Options()
-						.set("revert", "treeRevert")
+						.set("revert", "OmFileTree.treeRevert")
 						.set("cursor", Options.asString("move"))
-						.set("helper", "dragHelper")
+						.set("helper", "OmFileTree.dragHelper")
 						.set("cursorAt", "{left: 40, top: 18}")
 						.set("containment", Options.asString(treePanel.getContainment()))
 					, this));
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/filetree.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/filetree.js
index d7694c7..d268e5c 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/filetree.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/filetree.js
@@ -1,14 +1,21 @@
 /* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
-function dragHelper() {
-	let s = $(this);
-	if (s.hasClass('ui-state-active')) {
-		s = $('.file.ui-state-active.ui-draggable.ui-draggable-handle, .recording.ui-state-active.ui-draggable.ui-draggable-handle');
+var OmFileTree = (function() {
+	return {
+		dragHelper: function() {
+			let s = $(this);
+			if (s.hasClass('ui-state-active')) {
+				s = $('.file.ui-state-active.ui-draggable.ui-draggable-handle, .recording.ui-state-active.ui-draggable.ui-draggable-handle');
+			}
+			const c = $('<div/>').attr('id', 'draggingContainer').addClass('drag-container').width(80).height(36)
+				, h = $('<div class="ui-corner-all ui-widget-header"/>').append(s.clone()).width(s.width());
+			return c.append(h);
+		}
+		, treeRevert: function(dropped) {
+			$('.file-tree .trees')[0].scrollTop = $(this).parent()[0].offsetTop - 32;
+			return !dropped || (!!dropped.context && $(dropped.context).hasClass('wb', 'room'));
+		}
+		, confirmTrash: function() {
+			
+		}
 	}
-	const c = $('<div/>').attr('id', 'draggingContainer').addClass('drag-container').width(80).height(36)
-		, h = $('<div class="ui-corner-all ui-widget-header"/>').append(s.clone()).width(s.width());
-	return c.append(h);
-}
-function treeRevert(dropped) {
-	$('.file-tree .trees')[0].scrollTop = $(this).parent()[0].offsetTop - 32;
-	return !dropped || (!!dropped.context && $(dropped.context).hasClass('wb', 'room'));
-}
+})();
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
index 63a01ad..a2e4b50 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
@@ -27,7 +27,6 @@ import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dto.record.RecordingContainerData;
 import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.web.common.NameDialog;
-import org.apache.openmeetings.web.common.confirmation.ConfirmableAjaxBorder.ConfirmableBorderDialog;
 import org.apache.openmeetings.web.common.tree.FileTreePanel;
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.wicket.Component;
@@ -43,8 +42,8 @@ public class RoomFilePanel extends FileTreePanel {
 	@SpringBean
 	private RecordingDao recDao;
 
-	public RoomFilePanel(String id, RoomPanel room, NameDialog addFolder, ConfirmableBorderDialog trashConfirm) {
-		super(id, room.getRoom().getId(), addFolder, trashConfirm);
+	public RoomFilePanel(String id, RoomPanel room, NameDialog addFolder) {
+		super(id, room.getRoom().getId(), addFolder);
 		this.room = room;
 	}
 
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 1ac1510..278c558 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
@@ -51,7 +51,6 @@
 	</div>
 	<div wicket:id="activities"></div>
 	<div wicket:id="addFolder"></div>
-	<form wicket:id="form"><div wicket:id="confirm-trash"></div></form>
 	<div wicket:id="upload"></div>
 	<div wicket:id="confirm-kick" />
 	<div wicket:id="settings" />
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
index c79d1ac..34e4321 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
@@ -38,8 +38,7 @@ import org.apache.openmeetings.db.util.ws.TextRoomMessage;
 import org.apache.openmeetings.web.app.ClientManager;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.NameDialog;
-import org.apache.openmeetings.web.common.confirmation.ConfirmableAjaxBorder;
-import org.apache.openmeetings.web.common.confirmation.ConfirmableAjaxBorder.ConfirmableBorderDialog;
+import org.apache.openmeetings.web.common.confirmation.ConfirmationDialog;
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.openmeetings.web.room.RoomPanel.Action;
 import org.apache.openmeetings.web.room.VideoSettings;
@@ -53,12 +52,12 @@ import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.PriorityHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.LoadableDetachableModel;
 import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.string.Strings;
@@ -82,7 +81,7 @@ public class RoomSidebar extends Panel {
 	private final WebMarkupContainer userList = new WebMarkupContainer("user-list");
 	private final WebMarkupContainer fileTab = new WebMarkupContainer("file-tab");
 	private final SelfIconsPanel selfRights;
-	private ConfirmableAjaxBorder confirmKick;
+	private ConfirmationDialog confirmKick;
 	private boolean showFiles;
 	private boolean avInited = false;
 	private Client kickedClient;
@@ -167,23 +166,21 @@ public class RoomSidebar extends Panel {
 				super.onSubmit(target);
 			}
 		};
-		final Form<?> form = new Form<>("form");
-		ConfirmableBorderDialog confirmTrash = new ConfirmableBorderDialog("confirm-trash", getString("80"), getString("713"), form);
-		roomFiles = new RoomFilePanel("tree", room, addFolder, confirmTrash);
+		roomFiles = new RoomFilePanel("tree", room, addFolder);
 		add(selfRights, userList.add(users).setOutputMarkupId(true)
 				, fileTab.setVisible(!room.isInterview()), roomFiles.setVisible(!room.isInterview()));
 
 		add(addFolder, settings, userCount.setOutputMarkupId(true));
 		add(avSettings);
-		add(confirmKick = new ConfirmableAjaxBorder("confirm-kick", getString("603"), getString("605")) {
+		add(new ConfirmationDialog("confirm-kick", new ResourceModel("603"), new ResourceModel("605")) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void onSubmit(AjaxRequestTarget target) {
+			protected void onConfirm(AjaxRequestTarget target) {
 				kickUser(kickedClient);
 			}
 		});
-		add(form.add(confirmTrash), upload = new UploadDialog("upload", room, roomFiles));
+		add(upload = new UploadDialog("upload", room, roomFiles));
 		updateShowFiles(null);
 		add(new JQueryUIBehavior("#room-sidebar-tabs", "tabs"));
 		add(activities = new ActivitiesPanel("activities", room));
@@ -255,7 +252,7 @@ public class RoomSidebar extends Panel {
 							return;
 						}
 						if (!kickedClient.hasRight(Right.superModerator) && !self.getUid().equals(kickedClient.getUid())) {
-							confirmKick.getDialog().open(handler);
+							confirmKick.show(handler);
 						}
 					}
 					break;
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 293d312..f71a50c 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,15 +20,16 @@ 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.util.CallbackFunctionHelper.newOkCancelDangerConfirm;
 
 import java.util.Date;
 
 import org.apache.openmeetings.db.dao.room.InvitationDao;
 import org.apache.openmeetings.db.entity.room.Invitation;
 import org.apache.openmeetings.db.entity.room.Invitation.Valid;
-import org.apache.openmeetings.web.common.confirmation.ConfirmableAjaxBorder;
 import org.apache.openmeetings.web.util.DateLabel;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
@@ -39,7 +40,7 @@ import org.apache.wicket.spring.injection.annot.SpringBean;
 public class InvitationDetails extends Form<Invitation>{
 	private static final long serialVersionUID = 1L;
 	private final WebMarkupContainer list;
-	private ConfirmableAjaxBorder delBtn;
+	private AjaxLink<Void> delBtn;
 	private final Label valid = new Label("valid", Model.of(""));
 	private final Label invitee = new Label("invitee", Model.of(""));
 	private final DateLabel from = new DateLabel("validFrom", Model.of((Date)null));
@@ -51,27 +52,27 @@ public class InvitationDetails extends Form<Invitation>{
 		super(id, new CompoundPropertyModel<>(i));
 		this.list = list;
 		setOutputMarkupId(true);
-		add(new Label("id"));
-		add(valid);
-		add(invitee);
-		add(from);
-		add(to);
 	}
 
 	@Override
 	protected void onInitialize() {
 		super.onInitialize();
+		add(new Label("id"));
+		add(valid);
+		add(invitee);
+		add(from);
+		add(to);
 		// add a cancel button that can be used to submit the form via ajax
-		delBtn = new ConfirmableAjaxBorder("ajax-cancel-button", getString("80"), getString("833"), this) {
+		delBtn = new AjaxLink<>("ajax-cancel-button") {
 			private static final long serialVersionUID = 1L;
 
-			@Override
-			protected void onSubmit(AjaxRequestTarget target) {
-				inviteDao.delete(getModelObject(), getUserId());
-				setModelObject(new Invitation());
+			public void onClick(AjaxRequestTarget target) {
+				inviteDao.delete(InvitationDetails.this.getModelObject(), getUserId());
+				InvitationDetails.this.setModelObject(new Invitation());
 				target.add(list, InvitationDetails.this);
 			}
 		};
+		delBtn.add(newOkCancelDangerConfirm(this, getString("833")));
 		add(delBtn.setOutputMarkupId(true).setEnabled(false));
 	}
 
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 9d0658f..9dc0c20 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
@@ -44,8 +44,8 @@
 	<div class="adminPanelColumnForm">
 		<form wicket:id="form" class="adminForm">
 			<div class="actions ui-widget-header">
-				<div class="ui-button ui-widget ui-corner-all ui-button-icon-only ui-state-error" wicket:id="ajax-cancel-button" wicket:message="title:157">
-					<span class="ui-button-icon ui-icon ui-icon-closethick"></span>&nbsp;
+				<div class="btn btn-outline-warning btn-sm" wicket:id="ajax-cancel-button" wicket:message="title:157">
+					<i class="fas fa-times"></i>
 				</div>
 			</div>
 			<div class="scrollcontent" id="adminForm">
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
index d0fee77..8579b09 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
@@ -53,7 +53,7 @@ public class RecordingsPanel extends UserBasePanel {
 				super.onSubmit(target);
 			}
 		};
-		add(fileTree = new FileTreePanel("tree", null, addFolder, null) {
+		add(fileTree = new FileTreePanel("tree", null, addFolder) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
diff --git a/openmeetings-web/src/main/webapp/css/raw-tree.css b/openmeetings-web/src/main/webapp/css/raw-tree.css
index f73c578..c8d5f5e 100644
--- a/openmeetings-web/src/main/webapp/css/raw-tree.css
+++ b/openmeetings-web/src/main/webapp/css/raw-tree.css
@@ -34,6 +34,9 @@
 	padding-top: 5px;
 	overflow: hidden;
 }
+.trash-toolbar .om-confirm-dialog {
+	color: var(--danger);
+}
 .trash-toolbar .om-icon.fileitem, .trash-toolbar .om-icon.recorditem {
 	display: none !important;
 }