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 b9e3075  [OPENMEETINGS-2165] more work on file tree and friends
b9e3075 is described below

commit b9e3075e4a37eae038080876d83dd84eb827f1f5
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Wed Feb 12 00:36:40 2020 +0700

    [OPENMEETINGS-2165] more work on file tree and friends
---
 .../openmeetings/web/admin/email/EmailForm.java    | 39 +++++----
 .../openmeetings/web/admin/email/EmailPanel.html   |  6 +-
 .../openmeetings/web/admin/email/EmailPanel.java   |  2 +-
 .../web/admin/users/PasswordDialog.java            |  2 +-
 .../openmeetings/web/common/InvitationDialog.java  |  6 +-
 .../apache/openmeetings/web/common/NameDialog.java |  2 +-
 .../web/common/UploadableImagePanel.java           | 12 +--
 .../web/common/tree/DownloadMenuItem.java          | 60 --------------
 .../web/common/tree/FileTreePanel.java             | 80 +++++++++++++-----
 .../openmeetings/web/common/tree/FolderPanel.java  |  4 +-
 .../apache/openmeetings/web/pages/HashPage.java    |  2 +-
 .../web/pages/auth/ForgetPasswordDialog.java       |  4 +-
 .../web/pages/auth/RegisterDialog.java             |  4 +-
 .../web/pages/auth/ResetPasswordDialog.java        |  2 +-
 .../openmeetings/web/pages/auth/SignInDialog.html  |  2 +-
 .../openmeetings/web/pages/auth/SignInDialog.java  | 29 ++++---
 .../web/room/activities/ActivitiesPanel.java       | 23 +++---
 .../web/user/InviteUserMessageDialog.java          |  4 +-
 .../web/user/InviteUserToRoomDialog.java           |  2 +-
 .../openmeetings/web/user/MessageDialog.java       |  4 +-
 .../openmeetings/web/user/UserInfoDialog.java      |  6 +-
 .../dashboard/admin/AdminCleanupInfoDialog.java    |  2 +-
 .../web/user/dashboard/admin/AdminWidgetView.java  |  2 +-
 .../openmeetings/web/user/record/VideoInfo.html    |  4 +-
 .../openmeetings/web/user/record/VideoInfo.java    | 96 +++++++++++-----------
 .../src/main/webapp/css/raw-general.css            | 20 ++++-
 openmeetings-web/src/main/webapp/css/raw-tree.css  |  2 +
 .../src/main/webapp/css/raw-variables.css          |  4 +-
 28 files changed, 214 insertions(+), 211 deletions(-)

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 694c54d..cccb431 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,25 +18,29 @@
  */
 package org.apache.openmeetings.web.admin.email;
 
+import static 
org.apache.openmeetings.web.util.CallbackFunctionHelper.newOkCancelDangerConfirm;
+
 import org.apache.openmeetings.db.dao.basic.MailMessageDao;
 import org.apache.openmeetings.db.entity.basic.MailMessage;
-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.form.AjaxButton;
 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.model.CompoundPropertyModel;
 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.form.button.AjaxButton;
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxButton;
+import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 
 public class EmailForm extends Form<MailMessage> {
        private static final long serialVersionUID = 1L;
-       private final Label status;
-       private final AjaxButton reset;
-       private ConfirmableAjaxBorder delBtn;
+       private final Label status = new Label("status", Model.of(""));
+       private BootstrapAjaxButton reset;
+       private AjaxButton delBtn;
        private final WebMarkupContainer list;
        @SpringBean
        private MailMessageDao emailDao;
@@ -44,7 +48,12 @@ public class EmailForm extends Form<MailMessage> {
        public EmailForm(String id, final WebMarkupContainer list, MailMessage 
m) {
                super(id, new CompoundPropertyModel<>(m));
                this.list = list;
-               add(status = new Label("status", Model.of("")));
+       }
+
+       @Override
+       protected void onInitialize() {
+               super.onInitialize();
+               add(status);
                add(new Label("subject"));
                add(new Label("recipients"));
                add(new Label("body").setEscapeModelStrings(false));
@@ -52,7 +61,7 @@ public class EmailForm extends Form<MailMessage> {
                add(new DateLabel("updated"));
                add(new Label("errorCount"));
                add(new Label("lastError"));
-               add(reset = new AjaxButton("reset") {
+               add(reset = new BootstrapAjaxButton("reset", new 
ResourceModel("admin.email.reset.status"), Buttons.Type.Outline_Primary) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
@@ -62,30 +71,26 @@ public class EmailForm extends Form<MailMessage> {
                        }
                });
                reset.setEnabled(false);
-       }
-
-       @Override
-       protected void onInitialize() {
-               super.onInitialize();
                // 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 AjaxButton("btn-delete", this) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
                        protected void onSubmit(AjaxRequestTarget target) {
-                               emailDao.delete(getModelObject().getId());
-                               setModelObject(new MailMessage());
+                               
emailDao.delete(EmailForm.this.getModelObject().getId());
+                               EmailForm.this.setModelObject(new 
MailMessage());
                                target.add(list, EmailForm.this);
                        }
                };
-               add(delBtn.setOutputMarkupId(true).setEnabled(false));
+               delBtn.add(newOkCancelDangerConfirm(this, getString("833")));
+               
add(delBtn.setOutputMarkupPlaceholderTag(true).setOutputMarkupId(true).setVisible(false));
        }
 
        @Override
        protected void onModelChanged() {
                super.onModelChanged();
                MailMessage m = getModelObject();
-               delBtn.setEnabled(m.getId() != null);
+               delBtn.setVisible(m.getId() != null);
                status.setDefaultModelObject(getString("admin.email.status." + 
m.getStatus().name()));
                reset.setEnabled(m.getId() != null && MailMessage.Status.ERROR 
== m.getStatus());
        }
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 c34ceec..de64b20 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,8 +43,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="btn-delete" wicket:message="title:157,data-original-title:157">
+                                       <i class="fas fa-times"></i>
                                </div>
                        </div>
                        <div class="scrollcontent" id="adminForm">
@@ -84,7 +84,7 @@
                                                        <div class="col-8 
d-inline-block text-pre" wicket:id="lastError"></div>
                                                </div>
                                        </div>
-                                       <button wicket:id="reset" 
class="align-right mr-3"><wicket:message 
key="admin.email.reset.status"/></button>
+                                       <button wicket:id="reset" 
class="align-right mr-3"></button>
                                </fieldset>
                                <div class="bottom-bumper"></div>
                        </div>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/email/EmailPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/email/EmailPanel.java
index caf3373..0d825fc 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/email/EmailPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/email/EmailPanel.java
@@ -88,7 +88,7 @@ public class EmailPanel extends AdminBasePanel {
        private StringBuilder getRowClass(final MailMessage m) {
                StringBuilder sb = getRowClass(m.getId(), 
form.getModelObject().getId());
                if (MailMessage.Status.ERROR == m.getStatus()) {
-                       sb.append(" ui-state-error");
+                       sb.append(" bg-warning");
                }
                return sb;
        }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/PasswordDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/PasswordDialog.java
index c8a911a..f3876c2 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/PasswordDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/PasswordDialog.java
@@ -58,7 +58,7 @@ public class PasswordDialog extends Modal<String> {
                setCloseOnEscapeKey(true);
                setBackdrop(Backdrop.STATIC);
 
-               addButton(new BootstrapAjaxButton("button", new 
ResourceModel("54"), form, Buttons.Type.Primary) {
+               addButton(new BootstrapAjaxButton("button", new 
ResourceModel("54"), form, Buttons.Type.Outline_Primary) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/InvitationDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/InvitationDialog.java
index 02ba355..f31ccc9 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/InvitationDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/InvitationDialog.java
@@ -45,7 +45,7 @@ public class InvitationDialog extends Modal<Invitation> {
                setCloseOnEscapeKey(true);
                setBackdrop(Backdrop.STATIC);
 
-               addButton(generate = new BootstrapAjaxButton("button", new 
ResourceModel("1526"), form, Buttons.Type.Primary) {
+               addButton(generate = new BootstrapAjaxButton("button", new 
ResourceModel("1526"), form, Buttons.Type.Outline_Primary) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
@@ -58,7 +58,7 @@ public class InvitationDialog extends Modal<Invitation> {
                                InvitationDialog.this.onClick(target, 
InvitationForm.Action.GENERATE);
                        }
                });
-               addButton(send = new BootstrapAjaxButton("button", new 
ResourceModel("218"), form, Buttons.Type.Primary) {
+               addButton(send = new BootstrapAjaxButton("button", new 
ResourceModel("218"), form, Buttons.Type.Outline_Primary) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
@@ -71,7 +71,7 @@ public class InvitationDialog extends Modal<Invitation> {
                                InvitationDialog.this.onClick(target, 
InvitationForm.Action.SEND);
                        }
                });
-               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Secondary, new ResourceModel("lbl.cancel")) {
+               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Outline_Secondary, new ResourceModel("lbl.cancel")) {
                        private static final long serialVersionUID = 1L;
 
                        public void onClick(AjaxRequestTarget target) {
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/NameDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/NameDialog.java
index ef6c7a3..6ed3271 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/NameDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/NameDialog.java
@@ -57,7 +57,7 @@ public abstract class NameDialog extends Modal<String> {
                setBackdrop(Backdrop.STATIC);
 
                addCloseButton(new ResourceModel("lbl.cancel"));
-               addButton(new BootstrapAjaxButton("button", getAddBtnLabel(), 
form, Buttons.Type.Primary) {
+               addButton(new BootstrapAjaxButton("button", getAddBtnLabel(), 
form, Buttons.Type.Outline_Primary) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
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 d3b32e4..ff2f174 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
@@ -30,8 +30,6 @@ import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
 import 
org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadProgressBar;
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.upload.FileUpload;
@@ -48,7 +46,6 @@ import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesome5I
 public abstract class UploadableImagePanel extends ImagePanel {
        private static final long serialVersionUID = 1L;
        private static final Logger log = 
LoggerFactory.getLogger(UploadableImagePanel.class);
-       private static final String HOVER = "$('.profile 
.ui-button-icon.ui-icon.ui-icon-closethick.remove').hover(function (e) 
{$(this).toggleClass('ui-widget-content', e.type === 'mouseenter');});";
        private final FileUploadField fileUploadField = new 
FileUploadField("image", new ListModel<FileUpload>());
        private final Form<Void> form = new Form<>("form");
        private final boolean delayed;
@@ -75,7 +72,7 @@ public abstract class UploadableImagePanel extends ImagePanel 
{
                        add(new 
WebMarkupContainer("remove").add(AttributeModifier.append("onclick"
                                        , 
"$(this).parent().find('.fileinput').fileinput('clear');")));
                } else {
-                       BootstrapAjaxLink<String> remove = new 
BootstrapAjaxLink<>("remove", Buttons.Type.Secondary) {
+                       BootstrapAjaxLink<String> remove = new 
BootstrapAjaxLink<>("remove", Buttons.Type.Outline_Secondary) {
                                private static final long serialVersionUID = 1L;
 
                                @Override
@@ -105,12 +102,6 @@ public abstract class UploadableImagePanel extends 
ImagePanel {
        }
 
        @Override
-       public void renderHead(IHeaderResponse response) {
-               super.renderHead(response);
-               response.render(OnDomReadyHeaderItem.forScript(HOVER));
-       }
-
-       @Override
        public void update() {
                profile.addOrReplace(new 
WebMarkupContainer("img").setVisible(false));
                form.addOrReplace(getImage());
@@ -120,7 +111,6 @@ public abstract class UploadableImagePanel extends 
ImagePanel {
                update();
                target.ifPresent(t -> {
                        t.add(profile, form);
-                       t.appendJavaScript(HOVER);
                });
        }
 
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
deleted file mode 100644
index 56e87ad..0000000
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
+++ /dev/null
@@ -1,60 +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.tree;
-
-import java.io.File;
-
-import org.apache.openmeetings.db.entity.file.BaseFileItem;
-import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-
-import com.googlecode.wicket.jquery.ui.JQueryIcon;
-import com.googlecode.wicket.jquery.ui.widget.menu.MenuItem;
-
-public class DownloadMenuItem extends MenuItem {
-       private static final long serialVersionUID = 1L;
-       private final String ext;
-       private final FileTreePanel tree;
-
-       public DownloadMenuItem(String title, FileTreePanel tree, String ext) {
-               super(title, JQueryIcon.ARROWTHICKSTOP_1_S);
-               this.ext = ext;
-               this.tree = tree;
-       }
-
-       @Override
-       public boolean isEnabled() {
-               File f = null;
-               if (tree.getSelected().size() == 1) {
-                       f = tree.getLastSelected().getFile(ext);
-               }
-               return f != null && f.exists();
-       }
-
-       @Override
-       public void onClick(AjaxRequestTarget target) {
-               BaseFileItem fi = tree.getLastSelected();
-               File f = ext == null && (Type.Image == fi.getType() || 
Type.Presentation == fi.getType())
-                               ? fi.getOriginal() : fi.getFile(ext);
-               if (f != null && f.exists()) {
-                       tree.dwnldFile = f;
-                       tree.downloader.initiate(target);
-               }
-       }
-}
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 ddbcfcc..6879ff0 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
@@ -29,7 +29,6 @@ import static 
org.apache.openmeetings.web.common.BasePanel.EVT_CLICK;
 
 import java.io.File;
 import java.nio.file.Path;
-import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -57,9 +56,11 @@ import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 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.link.AbstractLink;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
 import org.apache.wicket.resource.FileSystemResource;
@@ -69,10 +70,15 @@ import com.googlecode.wicket.jquery.core.JQueryBehavior;
 import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.core.ajax.IJQueryAjaxAware;
 import com.googlecode.wicket.jquery.core.ajax.JQueryAjaxBehavior;
-import com.googlecode.wicket.jquery.ui.form.button.AjaxSplitButton;
 import com.googlecode.wicket.jquery.ui.interaction.droppable.Droppable;
 import com.googlecode.wicket.jquery.ui.interaction.droppable.DroppableBehavior;
-import com.googlecode.wicket.jquery.ui.widget.menu.IMenuItem;
+
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxLink;
+import de.agilecoders.wicket.core.markup.html.bootstrap.button.ButtonBehavior;
+import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.dropdown.SplitButton;
+import de.agilecoders.wicket.core.markup.html.bootstrap.image.IconType;
+import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesome5IconType;
 
 public abstract class FileTreePanel extends Panel {
        private static final long serialVersionUID = 1L;
@@ -87,7 +93,7 @@ public abstract class FileTreePanel extends Panel {
        private final WebMarkupContainer sizes = new 
WebMarkupContainer("sizes");
        private BaseFileItem lastSelected = null;
        private Map<String, BaseFileItem> selected = new HashMap<>();
-       File dwnldFile;
+       private File dwnldFile;
        final AjaxDownloadBehavior downloader = new AjaxDownloadBehavior(new 
IResource() {
                private static final long serialVersionUID = 1L;
 
@@ -109,12 +115,57 @@ public abstract class FileTreePanel extends Panel {
        protected final IModel<String> publicSize = Model.of((String)null);
        final ConvertingErrorsDialog errorsDialog = new 
ConvertingErrorsDialog("errors", Model.of((Recording)null));
        final FileItemTree tree;
-       final AjaxSplitButton download = new AjaxSplitButton("download", new 
ArrayList<IMenuItem>()) {
+       private final SplitButton download = new SplitButton("download", 
Model.of("")) {
                private static final long serialVersionUID = 1L;
 
+               private AbstractLink createLink(String markupId, IModel<String> 
model, String ext) {
+                       return new BootstrapAjaxLink<>(markupId, model, 
Buttons.Type.Outline_Primary, model) {
+                               private static final long serialVersionUID = 1L;
+
+                               @Override
+                               public boolean isEnabled() {
+                                       File f = null;
+                                       if (getSelected().size() == 1) {
+                                               f = 
getLastSelected().getFile(ext);
+                                       }
+                                       return f != null && f.exists();
+                               }
+
+                               @Override
+                               public void onClick(AjaxRequestTarget target) {
+                                       onDownlownClick(target, ext);
+                               }
+                       }.setIconType(FontAwesome5IconType.download_s);
+               }
+
                @Override
-               protected void onSubmit(AjaxRequestTarget target, IMenuItem 
item) {
-                       item.onClick(target);
+               protected List<AbstractLink> newSubMenuButtons(String 
buttonMarkupId) {
+                       return List.of(
+                                       createLink(buttonMarkupId, new 
ResourceModel("files.download.original"), null)
+                                       , createLink(buttonMarkupId, new 
ResourceModel("files.download.pdf"), EXTENSION_PDF)
+                                       , createLink(buttonMarkupId, new 
ResourceModel("files.download.jpg"), EXTENSION_JPG)
+                                       );
+               }
+
+               @Override
+               protected void addButtonBehavior(ButtonBehavior buttonBehavior) 
{
+                       
buttonBehavior.setSize(Buttons.Size.Small).setType(Buttons.Type.Outline_Secondary);
+                       super.addButtonBehavior(buttonBehavior);
+               }
+
+               @Override
+               protected AbstractLink newBaseButton(String markupId, 
IModel<String> labelModel, IModel<IconType> iconTypeModel) {
+                       return createLink(markupId, new 
ResourceModel("files.download.original"), null);
+               }
+
+               public void onDownlownClick(AjaxRequestTarget target, String 
ext) {
+                       BaseFileItem fi = getLastSelected();
+                       File f = ext == null && (Type.Image == fi.getType() || 
Type.Presentation == fi.getType())
+                                       ? fi.getOriginal() : fi.getFile(ext);
+                       if (f != null && f.exists()) {
+                               dwnldFile = f;
+                               downloader.initiate(target);
+                       }
                }
        };
        private final Form<Void> form = new Form<>("form");
@@ -152,14 +203,13 @@ public abstract class FileTreePanel extends Panel {
        @Override
        protected void onInitialize() {
                super.onInitialize();
-               download.setDefaultModelObject(newDownloadMenuList());
                Droppable<BaseFileItem> trashToolbar = new 
Droppable<>("trash-toolbar") {
                        private static final long serialVersionUID = 1L;
 
                        @Override
                        public void onConfigure(JQueryBehavior behavior) {
                                super.onConfigure(behavior);
-                               behavior.setOption("hoverClass", 
Options.asString("ui-state-hover trash-toolbar-hover"));
+                               behavior.setOption("hoverClass", 
Options.asString("bg-light trash-toolbar-hover"));
                                behavior.setOption("accept", 
Options.asString(".recorditem, .fileitem"));
                        }
 
@@ -424,16 +474,4 @@ public abstract class FileTreePanel extends Panel {
                publicSize.detach();
                super.onDetach();
        }
-
-       private List<IMenuItem> newDownloadMenuList() {
-               List<IMenuItem> list = new ArrayList<>();
-
-               //original
-               list.add(new 
DownloadMenuItem(getString("files.download.original"), this, null));
-               //pdf
-               list.add(new DownloadMenuItem(getString("files.download.pdf"), 
this, EXTENSION_PDF));
-               //jpg
-               list.add(new DownloadMenuItem(getString("files.download.jpg"), 
this, EXTENSION_JPG));
-               return list;
-       }
 }
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 717c058..ec3461c 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
@@ -83,7 +83,7 @@ public class FolderPanel extends Panel implements 
IDraggableListener, IDroppable
                        add(new DroppableBehavior(
                                        selector
                                        , new Options()
-                                               .set("hoverClass", 
Options.asString("ui-state-hover"))
+                                               .set("hoverClass", 
Options.asString("bg-light"))
                                                .set("accept", 
Options.asString(getDefaultModelObject() instanceof Recording ? ".recorditem" : 
".fileitem"))
                                        , this));
                }
@@ -221,7 +221,7 @@ public class FolderPanel extends Panel implements 
IDraggableListener, IDroppable
                        }
                }
                if (treePanel.isSelected(f)) {
-                       style.append("ui-state-active ");
+                       style.append("bg-info ");
                }
                String cls = f instanceof Recording ? "recorditem " : "fileitem 
";
                style.append(f.isReadOnly() ? "readonlyitem " : cls);
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/HashPage.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/HashPage.java
index 8bc7ca7..c1ce91a 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/HashPage.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/HashPage.java
@@ -69,7 +69,7 @@ public class HashPage extends BaseInitedPage implements 
IUpdatable {
        static final String HASH = "secure";
        static final String LANG = "language";
        private final WebMarkupContainer recContainer = new 
WebMarkupContainer(PANEL_RECORDING);
-       private final VideoInfo vi = new VideoInfo("info", null);
+       private final VideoInfo vi = new VideoInfo("info");
        private final VideoPlayer vp = new VideoPlayer("player");
        private boolean error = true;
        private MainPanel mp = null;
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java
index 1814d4b..8d33aea 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java
@@ -97,10 +97,10 @@ public class ForgetPasswordDialog extends Modal<String> {
                setUseCloseHandler(true);
                setBackdrop(Backdrop.STATIC);
 
-               addButton(new BootstrapAjaxButton("button", new 
ResourceModel("317"), form, Buttons.Type.Primary) {
+               addButton(new BootstrapAjaxButton("button", new 
ResourceModel("317"), form, Buttons.Type.Outline_Primary) {
                        private static final long serialVersionUID = 1L;
                }); // Send
-               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Secondary, new ResourceModel("lbl.cancel")) {
+               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Outline_Secondary, new ResourceModel("lbl.cancel")) {
                        private static final long serialVersionUID = 1L;
 
                        public void onClick(AjaxRequestTarget target) {
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
index 4f267d0..3b22aba 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
@@ -95,8 +95,8 @@ public class RegisterDialog extends Modal<String> {
                setUseCloseHandler(true);
                setBackdrop(Backdrop.STATIC);
 
-               addButton(new SpinnerAjaxButton("button", new 
ResourceModel("121"), form, Buttons.Type.Primary)); // register
-               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Secondary, new ResourceModel("lbl.cancel")) {
+               addButton(new SpinnerAjaxButton("button", new 
ResourceModel("121"), form, Buttons.Type.Outline_Primary)); // register
+               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Outline_Secondary, new ResourceModel("lbl.cancel")) {
                        private static final long serialVersionUID = 1L;
 
                        public void onClick(AjaxRequestTarget target) {
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
index 1d945bc..917cc54 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
@@ -61,7 +61,7 @@ public class ResetPasswordDialog extends Modal<String> {
                show(true);
 
                add(form);
-               addButton(new BootstrapAjaxButton("button", new 
ResourceModel("327"), form, Buttons.Type.Primary) {
+               addButton(new BootstrapAjaxButton("button", new 
ResourceModel("327"), form, Buttons.Type.Outline_Primary) {
                        private static final long serialVersionUID = 1L;
                }); // Reset
 
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html
index 36e48c9..419e744 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html
@@ -64,7 +64,7 @@
                                <i><wicket:message key="lbl.or"/></i>
                        </div>
                        <div wicket:id="oauthList">
-                               <button wicket:id="oauthBtn" class="btn 
btn-outline-info"><span class="provider" wicket:id="label"></span></button>
+                               <a wicket:id="oauthBtn"></a>
                        </div>
                </div>
                <div wicket:id="feedback" class="error"></div>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java
index 9b72502..5ee5805 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java
@@ -47,7 +47,6 @@ import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.markup.head.CssHeaderItem;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.CheckBox;
 import org.apache.wicket.markup.html.form.ChoiceRenderer;
 import org.apache.wicket.markup.html.form.DropDownChoice;
@@ -68,12 +67,12 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.googlecode.wicket.jquery.ui.effect.JQueryEffectBehavior;
-import com.googlecode.wicket.jquery.ui.form.button.Button;
 
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxLink;
 import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
+import de.agilecoders.wicket.core.markup.html.bootstrap.image.IconType;
 import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.spinner.SpinnerAjaxButton;
 
 public class SignInDialog extends Modal<String> {
@@ -106,7 +105,7 @@ public class SignInDialog extends Modal<String> {
                show(true);
                setCloseOnEscapeKey(false);
                setBackdrop(Backdrop.STATIC);
-               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Secondary, new ResourceModel("123")) {
+               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Outline_Secondary, new ResourceModel("123")) {
                        private static final long serialVersionUID = 1L;
 
                        public void onClick(AjaxRequestTarget target) {
@@ -115,7 +114,7 @@ public class SignInDialog extends Modal<String> {
                                register.show(target);
                        }
                });
-               addButton(new SpinnerAjaxButton("button", new 
ResourceModel("112"), form, Buttons.Type.Primary)); // Login
+               addButton(new SpinnerAjaxButton("button", new 
ResourceModel("112"), form, Buttons.Type.Outline_Primary)); // Login
 
                super.onInitialize();
        }
@@ -197,24 +196,34 @@ public class SignInDialog extends Modal<String> {
                                        @Override
                                        protected void populateItem(final 
ListItem<OAuthServer> item) {
                                                final OAuthServer s = 
item.getModelObject();
-                                               Button btn = new 
Button("oauthBtn") {
+
+                                               BootstrapAjaxLink<String> btn = 
new BootstrapAjaxLink<>("oauthBtn", null, Buttons.Type.Outline_Info, 
Model.of(s.getName())) {
                                                        private static final 
long serialVersionUID = 1L;
+                                                       {
+                                                               
setMarkupId("om-oauth-btn-" + s.getId());
+                                                               
setOutputMarkupId(true);
+                                                       }
 
                                                        @Override
-                                                       public void onSubmit() {
+                                                       public void 
onClick(AjaxRequestTarget target) {
                                                                showAuth(s);
                                                        }
 
                                                        @Override
                                                        public void 
renderHead(IHeaderResponse response) {
                                                                if 
(!Strings.isEmpty(s.getIconUrl())) {
-                                                                       
response.render(CssHeaderItem.forCSS("#" + this.getMarkupId() + " .provider 
{background-image: url(" + s.getIconUrl() + ")}", this.getMarkupId()));
+                                                                       
response.render(CssHeaderItem.forCSS("#" + this.getMarkupId() + " .provider 
{background-image: url(" + s.getIconUrl() + ")}", "oauth-btn-css-" + 
this.getMarkupId()));
                                                                }
                                                        }
                                                };
-                                               Component lbl = new 
Label("label", s.getName());
-                                               btn.add(lbl);
-                                               
item.add(btn.setDefaultFormProcessing(false)); //skip all rules, go to redirect
+                                               item.add(btn.setIconType(new 
IconType("provider") {
+                                                       private static final 
long serialVersionUID = 1L;
+
+                                                       @Override
+                                                       public String 
cssClassName() {
+                                                               return 
"provider";
+                                                       }
+                                               }));
                                                item.setRenderBodyOnly(true);
                                        }
                                }).setVisible(showOauth));
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
index 8e851ac..184910d 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
@@ -18,8 +18,14 @@
  */
 package org.apache.openmeetings.web.room.activities;
 
-import com.github.openjson.JSONArray;
-import com.github.openjson.JSONObject;
+import static org.apache.openmeetings.core.util.WebSocketHelper.sendRoom;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static 
org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
+import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
 import org.apache.commons.lang3.time.FastDateFormat;
 import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.room.Room.Right;
@@ -42,13 +48,8 @@ import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import static org.apache.openmeetings.core.util.WebSocketHelper.sendRoom;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static 
org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
-import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
+import com.github.openjson.JSONArray;
+import com.github.openjson.JSONObject;
 
 public class ActivitiesPanel extends Panel {
        private static final long serialVersionUID = 1L;
@@ -277,11 +278,11 @@ public class ActivitiesPanel extends Panel {
                        case reqRightAv:
                        case reqRightMuteOthers:
                        case haveQuestion:
-                               cls.append("ui-state-highlight");
+                               cls.append("bg-warning");
                                break;
                        case roomEnter:
                        case roomExit:
-                               cls.append("ui-state-default auto-clean");
+                               cls.append("bg-white auto-clean");
                }
                return cls;
        }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.java
index d99a3dc..f211460 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserMessageDialog.java
@@ -56,7 +56,7 @@ public class InviteUserMessageDialog extends Modal<String> {
                setCloseOnEscapeKey(true);
                setBackdrop(Backdrop.STATIC);
 
-               addButton(new BootstrapAjaxButton("button", new 
ResourceModel("213"), form, Buttons.Type.Primary) {
+               addButton(new BootstrapAjaxButton("button", new 
ResourceModel("213"), form, Buttons.Type.Outline_Primary) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
@@ -69,7 +69,7 @@ public class InviteUserMessageDialog extends Modal<String> {
                                InviteUserMessageDialog.this.close(target);
                        }
                }); //send
-               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Secondary, new ResourceModel("lbl.cancel")) {
+               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Outline_Secondary, new ResourceModel("lbl.cancel")) {
                        private static final long serialVersionUID = 1L;
 
                        public void onClick(AjaxRequestTarget target) {
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.java
index 1353f55..4aab3ff 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.java
@@ -72,7 +72,7 @@ public class InviteUserToRoomDialog extends Modal<String> {
                setCloseOnEscapeKey(true);
                setBackdrop(Backdrop.STATIC);
 
-               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Secondary, new ResourceModel("lbl.cancel")) {
+               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Outline_Secondary, new ResourceModel("lbl.cancel")) {
                        private static final long serialVersionUID = 1L;
 
                        public void onClick(AjaxRequestTarget target) {
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
index f719017..0aab9d7 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
@@ -119,7 +119,7 @@ public class MessageDialog extends Modal<PrivateMessage> {
                setBackdrop(Backdrop.STATIC);
                size(Modal.Size.Large);
 
-               addButton(new BootstrapAjaxButton("button", new 
ResourceModel("218"), form, Buttons.Type.Primary) {
+               addButton(new BootstrapAjaxButton("button", new 
ResourceModel("218"), form, Buttons.Type.Outline_Primary) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
@@ -210,7 +210,7 @@ public class MessageDialog extends Modal<PrivateMessage> {
                                onSend(target);
                        }
                }); // send
-               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Secondary, new ResourceModel("lbl.cancel")) {
+               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Outline_Secondary, new ResourceModel("lbl.cancel")) {
                        private static final long serialVersionUID = 1L;
 
                        public void onClick(AjaxRequestTarget target) {
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java
index 87926c6..9787758 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java
@@ -54,7 +54,7 @@ public class UserInfoDialog extends Modal<String> {
                header(new ResourceModel("1235"));
                setCloseOnEscapeKey(true);
                setBackdrop(Backdrop.STATIC);
-               addButton(contacts = new BootstrapAjaxLink<>("button", 
Model.of(""), Buttons.Type.Info, new ResourceModel("1186")) {
+               addButton(contacts = new BootstrapAjaxLink<>("button", 
Model.of(""), Buttons.Type.Outline_Info, new ResourceModel("1186")) {
                        private static final long serialVersionUID = 1L;
 
                        public void onClick(AjaxRequestTarget target) {
@@ -62,7 +62,7 @@ public class UserInfoDialog extends Modal<String> {
                                UserInfoDialog.this.close(target);
                        }
                });
-               addButton(message = new BootstrapAjaxLink<>("button", 
Model.of(""), Buttons.Type.Primary, new ResourceModel("1253")) {
+               addButton(message = new BootstrapAjaxLink<>("button", 
Model.of(""), Buttons.Type.Outline_Primary, new ResourceModel("1253")) {
                        private static final long serialVersionUID = 1L;
 
                        public void onClick(AjaxRequestTarget target) {
@@ -70,7 +70,7 @@ public class UserInfoDialog extends Modal<String> {
                                UserInfoDialog.this.close(target);
                        }
                });
-               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Secondary, new ResourceModel("lbl.cancel")) {
+               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Outline_Secondary, new ResourceModel("lbl.cancel")) {
                        private static final long serialVersionUID = 1L;
 
                        public void onClick(AjaxRequestTarget target) {
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 f89f06a..d84ccf9 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,7 +92,7 @@ public class AdminCleanupInfoDialog extends Modal<String> {
                        @Override
                        protected void onInitialize() {
                                super.onInitialize();
-                               SpinnerAjaxButton cleanup = 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.Outline_Danger) {
                                        private static final long 
serialVersionUID = 1L;
 
                                        @Override
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetView.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetView.java
index 499715a..29ed6a0 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetView.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetView.java
@@ -44,7 +44,7 @@ public class AdminWidgetView extends WidgetView {
                super.onInitialize();
                add(form);
                form.add(cleanupDialog = new 
AdminCleanupInfoDialog("cleanup-dialog"));
-               form.add(new SpinnerAjaxButton("show-cleanup-dialog", new 
ResourceModel("dashboard.widget.admin.cleanup.show"), form, 
Buttons.Type.Primary) {
+               form.add(new SpinnerAjaxButton("show-cleanup-dialog", new 
ResourceModel("dashboard.widget.admin.cleanup.show"), form, 
Buttons.Type.Outline_Primary) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
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 1cd4126..8fb4d72 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
@@ -41,8 +41,8 @@
                        </div>
                </div>
                <span wicket:id="downloadBtn"></span>
-               <button wicket:id="re-convert"><wicket:message 
key="1600"/></button>
-               <button wicket:id="share"><wicket:message 
key="button.label.share"/></button>
+               <button wicket:id="re-convert"></button>
+               <button wicket:id="share"></button>
        </form>
        <div wicket:id="invitation"></div>
 </wicket:panel>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java
index 602837a..a7f0811 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java
@@ -25,7 +25,6 @@ import static 
org.apache.openmeetings.web.app.WebSession.getUserId;
 
 import java.io.File;
 import java.nio.file.Path;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -44,31 +43,58 @@ import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.extensions.ajax.AjaxDownloadBehavior;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.link.AbstractLink;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.resource.FileSystemResource;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
-import com.googlecode.wicket.jquery.ui.JQueryIcon;
-import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
-import com.googlecode.wicket.jquery.ui.form.button.AjaxSplitButton;
-import com.googlecode.wicket.jquery.ui.widget.menu.IMenuItem;
-import com.googlecode.wicket.jquery.ui.widget.menu.MenuItem;
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxButton;
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxLink;
+import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.dropdown.SplitButton;
+import de.agilecoders.wicket.core.markup.html.bootstrap.image.IconType;
+import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesome5IconType;
 
 public class VideoInfo extends Panel {
        private static final long serialVersionUID = 1L;
        private final Form<Void> form = new Form<>("form");
-       private final AjaxSplitButton downloadBtn = new 
AjaxSplitButton("downloadBtn", new ArrayList<IMenuItem>());
-       private final AjaxButton reConvert = new AjaxButton("re-convert") {
+       private final SplitButton downloadBtn = new SplitButton("downloadBtn", 
Model.of("")) {
                private static final long serialVersionUID = 1L;
 
+               private AbstractLink createLink(String markupId, IModel<String> 
model, String ext) {
+                       return new BootstrapAjaxLink<>(markupId, model, 
Buttons.Type.Outline_Primary, model) {
+                               private static final long serialVersionUID = 1L;
+
+                               @Override
+                               public boolean isEnabled() {
+                                       BaseFileItem r = rm.getObject();
+                                       return r != null && 
r.exists(EXTENSION_MP4) && !r.isReadOnly();
+                               }
+
+                               @Override
+                               public void onClick(AjaxRequestTarget target) {
+                                       download.initiate(target);
+                               }
+                       }.setIconType(FontAwesome5IconType.download_s);
+               }
+
+               @Override
+               protected List<AbstractLink> newSubMenuButtons(String 
buttonMarkupId) {
+                       return List.of(createLink(buttonMarkupId, 
Model.of(EXTENSION_MP4), EXTENSION_MP4));
+               }
+
                @Override
-               protected String getIcon() {
-                       return JQueryIcon.REFRESH;
+               protected AbstractLink newBaseButton(String markupId, 
IModel<String> labelModel, IModel<IconType> iconTypeModel) {
+                       return createLink(markupId, Model.of(EXTENSION_MP4), 
EXTENSION_MP4);
                }
+       };
+       private final BootstrapAjaxButton reConvert = new 
BootstrapAjaxButton("re-convert", new ResourceModel("1600"), form, 
Buttons.Type.Outline_Warning) {
+               private static final long serialVersionUID = 1L;
 
                @Override
                protected void onSubmit(AjaxRequestTarget target) {
@@ -102,9 +128,9 @@ public class VideoInfo extends Panel {
        private final IModel<Recording> rm = new CompoundPropertyModel<>(new 
Recording());
        private final IModel<String> roomName = Model.of((String)null);
        private boolean isInterview = false;
-       private final InvitationDialog invite;
+       private InvitationDialog invite;
        RecordingInvitationForm rif = new RecordingInvitationForm("form");
-       private final AjaxButton share = new AjaxButton("share") {
+       private final BootstrapAjaxButton share = new 
BootstrapAjaxButton("share", new ResourceModel("button.label.share"), form, 
Buttons.Type.Outline_Success) {
                private static final long serialVersionUID = 1L;
 
                @Override
@@ -124,21 +150,8 @@ public class VideoInfo extends Panel {
        private RecordingChunkDao chunkDao;
 
        public VideoInfo(String id) {
-               this(id, null);
-       }
-
-       public VideoInfo(String id, Recording r) {
                super(id);
-               add(form.setOutputMarkupId(true));
                setDefaultModel(rm);
-
-               form.add(new Label("name"), new Label("duration"), new 
Label("recordEnd"), new Label("roomName", roomName),
-                               downloadBtn.setEnabled(false), 
reConvert.setEnabled(false), share.setEnabled(false));
-               add(download);
-               add(invite = new InvitationDialog("invitation", rif));
-               rif.setDialog(invite);
-
-               update(null, r);
        }
 
        public VideoInfo update(AjaxRequestTarget target, BaseFileItem _r) {
@@ -190,28 +203,19 @@ public class VideoInfo extends Panel {
        @Override
        protected void onInitialize() {
                super.onInitialize();
-               downloadBtn.setDefaultModelObject(newDownloadMenuList());
-       }
-
-       private List<IMenuItem> newDownloadMenuList() {
-               List<IMenuItem> list = new ArrayList<>();
-
-               //mp4
-               list.add(new MenuItem(EXTENSION_MP4, 
JQueryIcon.ARROWTHICKSTOP_1_S) {
-                       private static final long serialVersionUID = 1L;
-
-                       @Override
-                       public boolean isEnabled() {
-                               BaseFileItem r = rm.getObject();
-                               return r != null && r.exists(EXTENSION_MP4) && 
!r.isReadOnly();
-                       }
+               add(form.setOutputMarkupId(true));
+               form.add(new Label("name")
+                               , new Label("duration")
+                               , new Label("recordEnd")
+                               , new Label("roomName", roomName)
+                               , downloadBtn.setEnabled(false)
+                               , 
reConvert.setIconType(FontAwesome5IconType.sync_alt_s).setEnabled(false)
+                               , 
share.setIconType(FontAwesome5IconType.share_alt_s).setEnabled(false));
+               add(download);
+               add(invite = new InvitationDialog("invitation", rif));
+               rif.setDialog(invite);
 
-                       @Override
-                       public void onClick(AjaxRequestTarget target) {
-                               download.initiate(target);
-                       }
-               });
-               return list;
+               update(null, null);
        }
 
        public VideoInfo setShowShare(boolean visible) {
diff --git a/openmeetings-web/src/main/webapp/css/raw-general.css 
b/openmeetings-web/src/main/webapp/css/raw-general.css
index 614b898..fbfa3da 100644
--- a/openmeetings-web/src/main/webapp/css/raw-general.css
+++ b/openmeetings-web/src/main/webapp/css/raw-general.css
@@ -19,9 +19,12 @@ html, body {
 }
 .signin .oauth-section .provider {
        background-position: 0 0;
-       background-size: 16px;
+       background-size: 24px;
        background-repeat: no-repeat;
+       height: 24px;
+       display: inline-block;
        padding-left: 20px;
+       vertical-align: bottom;
 }
 .signin .or-seperator {
        margin-top: 20px;
@@ -235,7 +238,7 @@ html, body {
        vertical-align: text-top;
 }
 .om-icon.big::before {
-       font-size: 2.4em;
+       font-size: 2.2em;
 }
 .cross.om-icon {
        background-image: url(images/cross.png);
@@ -424,12 +427,23 @@ select.messages.selector {
        height: 100%;
 }
 .recording-panel .file-tree {
-       width: 325px;
        height: 100%;
 }
 .recording-panel .tree-panel {
        height: calc(100% - var(--info-height));
 }
+.recording-panel .file-tree
+, .recording-panel .tree-panel
+, .recording-panel .info
+{
+       width: 325px;
+}
+.recording-panel .info .details .value {
+       padding: 0;
+       overflow: hidden;
+       white-space: nowrap;
+       text-overflow: ellipsis;
+}
 .recording-panel .file-tree .info {
        height: var(--info-height);
 }
diff --git a/openmeetings-web/src/main/webapp/css/raw-tree.css 
b/openmeetings-web/src/main/webapp/css/raw-tree.css
index 0055dec..f73c578 100644
--- a/openmeetings-web/src/main/webapp/css/raw-tree.css
+++ b/openmeetings-web/src/main/webapp/css/raw-tree.css
@@ -31,6 +31,8 @@
        line-height: 20px;
        color: transparent;
        height: var(--tree-header-height);
+       padding-top: 5px;
+       overflow: hidden;
 }
 .trash-toolbar .om-icon.fileitem, .trash-toolbar .om-icon.recorditem {
        display: none !important;
diff --git a/openmeetings-web/src/main/webapp/css/raw-variables.css 
b/openmeetings-web/src/main/webapp/css/raw-variables.css
index bad1738..ea8ed65 100644
--- a/openmeetings-web/src/main/webapp/css/raw-variables.css
+++ b/openmeetings-web/src/main/webapp/css/raw-variables.css
@@ -34,11 +34,11 @@ body.no-menu {
        --actions-height: 40px;
 }
 .recording-panel {
-       --info-height: 115px;
+       --info-height: 125px;
 }
 .file-tree {
        --tree-header-height: 36px;
-       --tree-footer-height: 40px;
+       --tree-footer-height: 80px;
 }
 .main.room {
        --header-height: 0px;

Reply via email to