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/10 10:58:00 UTC

[openmeetings] branch csp updated: [OPENMEETINGS-2165] more work on recordings

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 8050047  [OPENMEETINGS-2165] more work on recordings
8050047 is described below

commit 80500471b1fb263a19935ee06a1cebc9676415e2
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Mon Feb 10 17:57:44 2020 +0700

    [OPENMEETINGS-2165] more work on recordings
---
 .../openmeetings/db/entity/file/BaseFileItem.java  |  2 +-
 .../apache/openmeetings/web/common/MainPanel.java  |  9 +-
 .../web/common/UploadableImagePanel.java           | 11 ++-
 .../web/common/tree/ConvertingErrorsDialog.html    | 26 +++---
 .../web/common/tree/ConvertingErrorsDialog.java    | 53 +++++-------
 .../web/common/tree/FileItemPanel.html             |  2 +-
 .../web/common/tree/FileItemPanel.java             |  2 +-
 .../web/common/tree/FileTreePanel.html             | 12 +--
 .../web/common/tree/FileTreePanel.java             |  9 +-
 .../dashboard/admin/AdminCleanupInfoDialog.java    |  9 +-
 .../web/user/record/RecordingsPanel.html           |  2 +-
 .../openmeetings/web/user/record/VideoInfo.html    | 16 ++--
 .../src/main/webapp/css/raw-general.css            | 17 ++--
 openmeetings-web/src/main/webapp/css/raw-tree.css  | 95 +++++++++++-----------
 pom.xml                                            |  2 +-
 15 files changed, 125 insertions(+), 142 deletions(-)

diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
index ffda12b..b641b0f 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
@@ -334,7 +334,7 @@ public abstract class BaseFileItem extends HistoricalEntity {
 	}
 
 	public final boolean exists() {
-		return exists(null);
+		return Type.Folder == type || exists(null);
 	}
 
 	public final boolean exists(String ext) {
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 da24f4b..427114a 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
@@ -295,11 +295,8 @@ public class MainPanel extends Panel {
 				response.render(new PriorityHeaderItem(getNamedFunction("inviteUser", this, explicit(PARAM_USER_ID))));
 			}
 		});
-		topLinks.add(new AjaxLink<Void>("logout") {
+		AjaxLink<Void> logout = new AjaxLink<>("logout") {
 			private static final long serialVersionUID = 1L;
-			{
-				add(newOkCancelConfirm(this, getString("634")));
-			}
 
 			@Override
 			public void onClick(AjaxRequestTarget target) {
@@ -307,7 +304,9 @@ public class MainPanel extends Panel {
 				setResponsePage(Application.get().getSignInPageClass());
 			}
 
-		});
+		};
+		logout.add(newOkCancelConfirm(this, getString("634")));
+		topLinks.add(logout);
 	}
 
 	private OmMenuItem getSubItem(String lbl, String title, MenuActions action, MenuParams param) {
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 53903b8..d3b32e4 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
@@ -75,12 +75,8 @@ public abstract class UploadableImagePanel extends ImagePanel {
 			add(new WebMarkupContainer("remove").add(AttributeModifier.append("onclick"
 					, "$(this).parent().find('.fileinput').fileinput('clear');")));
 		} else {
-			add(new BootstrapAjaxLink<String>("remove", Buttons.Type.Secondary) {
+			BootstrapAjaxLink<String> remove = new BootstrapAjaxLink<>("remove", Buttons.Type.Secondary) {
 				private static final long serialVersionUID = 1L;
-				{
-					setIconType(FontAwesome5IconType.times_s);
-					add(newOkCancelConfirm(this, getString("833")));
-				}
 
 				@Override
 				public void onClick(AjaxRequestTarget target) {
@@ -91,7 +87,10 @@ public abstract class UploadableImagePanel extends ImagePanel {
 					}
 					update(Optional.of(target));
 				}
-			});
+			};
+			add(remove
+					.setIconType(FontAwesome5IconType.times_s)
+					.add(newOkCancelConfirm(this, getString("833"))));
 			fileUploadField.add(new AjaxFormSubmitBehavior(form, "change") {
 				private static final long serialVersionUID = 1L;
 
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.html
index e44024b..0ee30ca 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.html
@@ -20,19 +20,21 @@
 -->
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org">
-<wicket:panel>
+<wicket:extend>
 	<div wicket:id="container" class="dialog errors">
 		<h3 wicket:id="message"></h3>
-		<table class="w-100">
-			<tr>
-				<th><wicket:message key="1593"/></th>
-				<th><wicket:message key="1594"/></th>
-			</tr>
-			<tr wicket:id="row">
-				<td wicket:id="exitCode"></td>
-				<td wicket:id="message" class="message"></td>
-			</tr>
-		</table>
+		<div class="scroll-container">
+			<table class="w-100">
+				<tr>
+					<th><wicket:message key="1593"/></th>
+					<th><wicket:message key="1594"/></th>
+				</tr>
+				<tr wicket:id="row">
+					<td wicket:id="exitCode"></td>
+					<td wicket:id="message" class="message"></td>
+				</tr>
+			</table>
+		</div>
 	</div>
-</wicket:panel>
+</wicket:extend>
 </html>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java
index cb2c68b..560f4f5 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java
@@ -20,13 +20,13 @@ package org.apache.openmeetings.web.common.tree;
 
 import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.openmeetings.db.dao.file.FileItemLogDao;
 import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.file.FileItemLog;
 import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.Component;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
@@ -37,10 +37,9 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
-import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 
-public class ConvertingErrorsDialog extends AbstractDialog<BaseFileItem> {
+public class ConvertingErrorsDialog extends Modal<BaseFileItem> {
 	private static final long serialVersionUID = 1L;
 	private final WebMarkupContainer container = new WebMarkupContainer("container");
 	private final Label message = new Label("message", Model.of((String)null));
@@ -60,39 +59,37 @@ public class ConvertingErrorsDialog extends AbstractDialog<BaseFileItem> {
 			}
 		}
 	};
+	private Component headerLabel;
+
 	@SpringBean
 	private FileItemLogDao fileLogDao;
 
 	public ConvertingErrorsDialog(String id, IModel<BaseFileItem> model) {
-		super(id, "", model);
-		add(container.add(message.setVisible(false), logView.setVisible(false)).setOutputMarkupId(true));
+		super(id, model);
 	}
 
 	@Override
 	protected void onInitialize() {
-		getTitle().setObject(getString("887"));
-		super.onInitialize();
-	}
+		header(new ResourceModel("887"));
+		setCloseOnEscapeKey(true);
+		setBackdrop(Backdrop.STATIC);
+		size(Modal.Size.Large);
 
-	@Override
-	public int getWidth() {
-		return 600;
-	}
-
-	@Override
-	public boolean isResizable() {
-		return true;
+		super.onInitialize();
+		add(container.add(message.setVisible(false), logView.setVisible(false)).setOutputMarkupId(true));
 	}
 
 	@Override
-	public boolean isModal() {
-		return true;
+	protected Component createHeaderLabel(String id, String label) {
+		headerLabel = super.createHeaderLabel(id, label);
+		return headerLabel;
 	}
 
 	@Override
-	protected void onOpen(IPartialPageRequestHandler handler) {
+	public Modal<BaseFileItem> show(IPartialPageRequestHandler handler) {
 		BaseFileItem f = getModelObject();
-		setTitle(handler, new ResourceModel(f.getType() == BaseFileItem.Type.Recording ? "887" : "convert.errors.file"));
+		headerLabel.setDefaultModel(new ResourceModel(f.getType() == BaseFileItem.Type.Recording ? "887" : "convert.errors.file"));
+
 		List<FileItemLog> logs = fileLogDao.get(f);
 		if (f.getHash() == null) {
 			message.setVisible(true);
@@ -107,17 +104,7 @@ public class ConvertingErrorsDialog extends AbstractDialog<BaseFileItem> {
 			logView.setVisible(false);
 			logView.setList(logs).setVisible(true);
 		}
-		handler.add(container);
-		super.onOpen(handler);
-	}
-
-	@Override
-	public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
-		//no-op
-	}
-
-	@Override
-	protected List<DialogButton> getButtons() {
-		return new ArrayList<>();
+		handler.add(container, headerLabel);
+		return super.show(handler);
 	}
 }
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.html
index a10ec2d..c755ef3 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.html
@@ -20,5 +20,5 @@
 -->
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org">
-<wicket:extend><span wicket:id="errors" class="errors"></span></wicket:extend>
+<wicket:extend><span wicket:id="errors" class="errors om-icon big clickable" wicket:message="title:convert.errors.file"></span></wicket:extend>
 </html>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.java
index 6d1273d..a212b88 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.java
@@ -53,7 +53,7 @@ public class FileItemPanel extends FolderPanel {
 			@Override
 			protected void onEvent(AjaxRequestTarget target) {
 				fileTreePanel.errorsDialog.setDefaultModel(model);
-				fileTreePanel.errorsDialog.open(target);
+				fileTreePanel.errorsDialog.show(target);
 			}
 		}).setVisible(visible);
 		add(errors);
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
index 6012b37..ee726c3 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
@@ -25,15 +25,9 @@
 	<div class="file-tree item drop area">
 		<div class="icons clear trash-toolbar" wicket:id="trash-toolbar" wicket:message="title:705">
 			<span wicket:id="upload" wicket:message="title:702"></span>
-			<span wicket:id="create" wicket:message="title:703">
-				<i class="fas fa-folder-plus"></i>
-			</span>
-			<span wicket:id="refresh" class="om-icon big align-left clickable" wicket:message="title:lbl.refresh">
-				<i class="fas fa-sync-alt"></i>
-			</span>
-			<span wicket:id="trash">
-				<i class="fas fa-trash-alt"></i>
-			</span>
+			<span wicket:id="create" wicket:message="title:703"></span>
+			<span wicket:id="refresh" class="refresh om-icon big align-left clickable" wicket:message="title:lbl.refresh"></span>
+			<span wicket:id="trash"></span>
 			<div class="clear"></div>
 		</div>
 		<div wicket:id="tree-container" class="trees">
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 2e5a3ac..157db03 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
@@ -79,6 +79,9 @@ public abstract class FileTreePanel extends Panel {
 	private static final String ALIGN_LEFT_CLASS = " align-left";
 	private static final String ALIGN_RIGHT_CLASS = " align-right";
 	private static final String BASE_CLASS = " om-icon big clickable";
+	private static final String UPLOAD_CLASS = "add" + BASE_CLASS + ALIGN_LEFT_CLASS;
+	private static final String CREATE_DIR_CLASS = "folder-create" + BASE_CLASS + ALIGN_LEFT_CLASS;
+	private static final String TRASH_CLASS = "trash" + BASE_CLASS + ALIGN_RIGHT_CLASS;
 	private static final String DISABLED_CLASS = " disabled";
 	final WebMarkupContainer trees = new WebMarkupContainer("tree-container");
 	private final WebMarkupContainer sizes = new WebMarkupContainer("sizes");
@@ -278,10 +281,10 @@ public abstract class FileTreePanel extends Panel {
 			this.readOnly = readOnly;
 			tree.refreshRoots(!readOnly);
 			createDir.setEnabled(!readOnly);
-			createDir.add(AttributeModifier.replace(ATTR_CLASS, BASE_CLASS + ALIGN_LEFT_CLASS + (readOnly ? DISABLED_CLASS : "")));
+			createDir.add(AttributeModifier.replace(ATTR_CLASS, CREATE_DIR_CLASS + (readOnly ? DISABLED_CLASS : "")));
 			upload.setEnabled(!readOnly);
-			upload.add(AttributeModifier.replace(ATTR_CLASS, BASE_CLASS + ALIGN_LEFT_CLASS + (readOnly ? DISABLED_CLASS : "")));
-			trashBorder.add(AttributeModifier.replace(ATTR_CLASS, BASE_CLASS + ALIGN_RIGHT_CLASS + (readOnly ? DISABLED_CLASS : "")));
+			upload.add(AttributeModifier.replace(ATTR_CLASS, UPLOAD_CLASS + (readOnly ? DISABLED_CLASS : "")));
+			trashBorder.add(AttributeModifier.replace(ATTR_CLASS, TRASH_CLASS + (readOnly ? DISABLED_CLASS : "")));
 			if (handler != null) {
 				handler.add(createDir, upload, trashBorder);
 				update(handler);
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 08f8f9e..f89f06a 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
@@ -92,13 +92,9 @@ public class AdminCleanupInfoDialog extends Modal<String> {
 			@Override
 			protected void onInitialize() {
 				super.onInitialize();
-				add(new SpinnerAjaxButton("cleanup", new ResourceModel("dashboard.widget.admin.cleanup.cleanup"), this, Buttons.Type.Danger) {
+				SpinnerAjaxButton cleanup = new SpinnerAjaxButton("cleanup", new ResourceModel("dashboard.widget.admin.cleanup.cleanup"), this, Buttons.Type.Danger) {
 					private static final long serialVersionUID = 1L;
 
-					{
-						add(newOkCancelDangerConfirm(this, getString("dashboard.widget.admin.cleanup.warn")));
-					}
-
 					@Override
 					protected void onSubmit(AjaxRequestTarget target) {
 						cleanup(target);
@@ -108,7 +104,8 @@ public class AdminCleanupInfoDialog extends Modal<String> {
 					protected void onError(AjaxRequestTarget target) {
 						target.add(feedback);
 					}
-				});
+				};
+				add(cleanup.add(newOkCancelDangerConfirm(this, getString("dashboard.widget.admin.cleanup.warn"))));
 			}
 		});
 	}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html
index 67f33d7..eaee8ef 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html
@@ -21,7 +21,7 @@
 <html xmlns:wicket="http://wicket.apache.org">
 <wicket:panel>
 	<div class="recording-panel">
-		<div class="file tree">
+		<div class="h-100">
 			<div class="tree-panel" wicket:id="tree"></div>
 			<div class="info" wicket:id="info"></div>
 		</div>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.html
index c955f48..1cd4126 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.html
@@ -24,20 +24,20 @@
 	<form class="info" wicket:id="form">
 		<div class="details">
 			<div class="row">
-				<div class="label" wicket:message="title:165"><wicket:message key="165"/></div>
-				<div class="value" wicket:id="name"></div>
+				<div class="label col-3" wicket:message="title:165"><wicket:message key="165"/></div>
+				<div class="value col-9" wicket:id="name"></div>
 			</div>
 			<div class="row">
-				<div class="label" wicket:message="title:864"><wicket:message key="864"/></div>
-				<div class="value" wicket:id="duration"></div>
+				<div class="label col-3" wicket:message="title:864"><wicket:message key="864"/></div>
+				<div class="value col-9" wicket:id="duration"></div>
 			</div>
 			<div class="row">
-				<div class="label" wicket:message="title:865"><wicket:message key="865"/></div>
-				<div class="value" wicket:id="recordEnd"></div>
+				<div class="label col-3" wicket:message="title:865"><wicket:message key="865"/></div>
+				<div class="value col-9" wicket:id="recordEnd"></div>
 			</div>
 			<div class="row">
-				<div class="label" wicket:message="title:406"><wicket:message key="406"/></div>
-				<div class="value" wicket:id="roomName"></div>
+				<div class="label col-3" wicket:message="title:406"><wicket:message key="406"/></div>
+				<div class="value col-9" wicket:id="roomName"></div>
 			</div>
 		</div>
 		<span wicket:id="downloadBtn"></span>
diff --git a/openmeetings-web/src/main/webapp/css/raw-general.css b/openmeetings-web/src/main/webapp/css/raw-general.css
index 436de78..297c5fb 100644
--- a/openmeetings-web/src/main/webapp/css/raw-general.css
+++ b/openmeetings-web/src/main/webapp/css/raw-general.css
@@ -227,9 +227,15 @@ html, body {
 	width: 34px;
 	height: 34px;
 }
-.om-icon.big i {
-	font-size: 2.5em;
+.om-icon::before {
+	font-family: 'Font Awesome 5 Free';
+	font-weight: 900;
 	color: var(--secondary);
+	font-size: 1.5em;
+	vertical-align: text-top;
+}
+.om-icon.big::before {
+	font-size: 2.4em;
 }
 .cross.om-icon {
 	background-image: url(images/cross.png);
@@ -421,17 +427,12 @@ select.messages.selector {
 	width: 325px;
 	height: 100%;
 }
-.recording-panel .file-tree .tree-panel {
+.recording-panel .tree-panel {
 	height: calc(100% - var(--info-height));
 }
 .recording-panel .file-tree .info {
 	height: var(--info-height);
 }
-.recording-panel .file-tree .tree-panel form
-	, .recording-panel .file-tree .tree-panel form .file.tree
-{
-	height: 100%;
-}
 .recording-panel .video {
 	width: 100%;
 	display: inline-block;
diff --git a/openmeetings-web/src/main/webapp/css/raw-tree.css b/openmeetings-web/src/main/webapp/css/raw-tree.css
index 999b5cd..0055dec 100644
--- a/openmeetings-web/src/main/webapp/css/raw-tree.css
+++ b/openmeetings-web/src/main/webapp/css/raw-tree.css
@@ -61,6 +61,14 @@
 	width: auto;
 	margin-top: 0;
 }
+.trees .om-icon.big {
+	position: relative;
+}
+.trees .om-icon.big::before {
+	position: absolute;
+	left: -3px;
+	top: -10px;
+}
 .trees .om-icon span {
 	white-space: nowrap;
 	padding-right: 20px;
@@ -70,65 +78,53 @@
 	white-space: nowrap;
 }
 
-.refresh.om-icon {
-	background-image: url(images/refresh.png);
+.refresh.om-icon::before {
+	content: '\f2f1';
 }
-.trash.om-icon {
-	background-image: url(images/bin_closed.png);
+.trash.om-icon::before {
+	content: '\f2ed';
 }
-.ui-state-hover.trash-toolbar-hover .trash.om-icon {
-	background-image: url(images/bin_empty.png);
+.ui-state-hover.trash-toolbar-hover .trash.om-icon::before {
+	font-weight: 900;
 }
-.folder-create.om-icon {
-	background-image: url(images/folder_add.png);
+.folder-create.om-icon::before {
+	content: '\f65e';
 }
-.recording.om-icon {
-	background-image: url(images/film.png);
+.recording.om-icon::before {
+	content: '\f008';
 }
-.broken.recording.om-icon {
-	background-image: url(images/film_error.png);
+.broken.om-icon::before {
+	color: var(--danger);
 }
-.processing.recording.om-icon {
-	background-image: url(images/film_processing.png);
+.processing.om-icon {
+	color: var(--info);
 }
 .file.om-icon, .recording.om-icon {
 	padding-left: 34px;
 }
-.my.file.om-icon {
-	background-image: url(images/house_link.png);
-}
-.public.file.om-icon {
-	background-image: url(images/world_link.png);
+.my.file.om-icon::before {
+	content: '\f015';
 }
-.image.file.om-icon {
-	background-image: url(images/picture.png);
+.public.file.om-icon::before {
+	content: '\f0ac';
 }
-.broken.image.file.om-icon {
-	background-image: url(images/picture_error.png);
+.image.file.om-icon::before {
+	content: '\f1c5';
 }
-.chart.file.om-icon {
-	background-image: url(images/chart_pie.png);
+.chart.file.om-icon::before {
+	content: '\f200';
 }
-.broken.chart.file.om-icon {
-	background-image: url(images/chart_pie_error.png);
+.wml.file.om-icon::before {
+	content: '\f56f';
 }
-.wml.file.om-icon {
-	background-image: url(images/layout.png);
+.doc.file.om-icon::before {
+	content: '\f15b';
 }
-.broken.wml.file.om-icon {
-	background-image: url(images/layout_error.png);
+.folder.file.om-icon::before {
+	content: '\f07b';
 }
-.doc.file.om-icon {
-	background-image: url(images/page.png);
-}
-.broken.doc.file.om-icon {
-	background-image: url(images/page_error.png);
-}
-.folder.file.om-icon {
-	background-image: url(images/folder.png);
-}
-.folder-open.file.om-icon {
-	background-image: url(images/folder_open.png);
+.folder-open.file.om-icon::before {
+	content: '\f07c';
 }
 .drag-container .om-icon {
 	display: block !important;
@@ -161,21 +157,26 @@
 	position: absolute;
 	top: 0px;
 	right: 0px;
-	background-image: url(images/script_error.png);
 	width: 32px;
 	height: 32px;
-	background-repeat: no-repeat;
+}
+.file.item .errors::before {
+	color: var(--warning);
+	content: '\f071';
 }
 .dialog.errors {
-	width: 600px;
 	height: 500px;
 	font-size: small;
 }
+.dialog.errors .scroll-container {
+	overflow: auto;
+	height: calc(100% - 50px);
+}
 .dialog.errors .alert {
-	color: red;
+	color: var(--danger);
 }
 .dialog.errors .warn {
-	color: #afaf09;
+	color: var(--warning);
 }
 .dialog.errors .message {
 	display: block;
diff --git a/pom.xml b/pom.xml
index 6364945..6d9a92b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -75,7 +75,7 @@
 		<!-- dependency versions -->
 		<junit.version>5.5.2</junit.version>
 		<wicket.version>9.0.0-M5-SNAPSHOT</wicket.version>
-		<wicketju.version>9.0.0-SNAPSHOT</wicketju.version>
+		<wicketju.version>9.0.0-M4</wicketju.version>
 		<wickets.version>9.0.0-M5-SNAPSHOT</wickets.version>
 		<wicket-bootstrap.version>5.0.0-M1-SNAPSHOT</wicket-bootstrap.version>
 		<red5-client.version>1.2.3</red5-client.version>