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 1684b9e  [OPENMEETINGS-2165] signin page and dialogs are moved to 
bootstrap
1684b9e is described below

commit 1684b9e606d3d575638081e345b04101e64a53cf
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Sun Jan 26 21:03:11 2020 +0700

    [OPENMEETINGS-2165] signin page and dialogs are moved to bootstrap
---
 openmeetings-web/pom.xml                           |   7 +-
 .../apache/openmeetings/web/app/Application.java   |   6 +-
 .../apache/openmeetings/web/common/Captcha.html    |   2 +-
 .../apache/openmeetings/web/common/Captcha.java    |  24 +-
 .../apache/openmeetings/web/pages/MainPage.java    |  11 +-
 .../apache/openmeetings/web/pages/ResetPage.html   |   1 +
 .../apache/openmeetings/web/pages/ResetPage.java   |  20 +-
 .../web/pages/auth/ForgetPasswordDialog.html       |  51 +++--
 .../web/pages/auth/ForgetPasswordDialog.java       | 232 ++++++++++----------
 .../web/pages/auth/RegisterDialog.html             |  41 ++--
 .../web/pages/auth/RegisterDialog.java             | 152 ++++++-------
 .../web/pages/auth/ResetPasswordDialog.html        |  33 ++-
 .../web/pages/auth/ResetPasswordDialog.java        | 115 ++++------
 .../openmeetings/web/pages/auth/SignInDialog.html  |  70 +++---
 .../openmeetings/web/pages/auth/SignInDialog.java  | 243 +++++++++------------
 .../openmeetings/web/pages/auth/SignInPage.html    |   2 +
 .../openmeetings/web/pages/auth/SignInPage.java    |  71 +++++-
 .../src/main/webapp/css/raw-general.css            |   9 +-
 18 files changed, 539 insertions(+), 551 deletions(-)

diff --git a/openmeetings-web/pom.xml b/openmeetings-web/pom.xml
index 2e39289..e50f39f 100644
--- a/openmeetings-web/pom.xml
+++ b/openmeetings-web/pom.xml
@@ -661,7 +661,7 @@
                </dependency>
                <dependency>
                        <groupId>de.agilecoders.wicket</groupId>
-                       <artifactId>wicket-bootstrap-core</artifactId>
+                       <artifactId>wicket-bootstrap-extensions</artifactId>
                        <version>${wicket-bootstrap.version}</version>
                </dependency>
                <dependency>
@@ -670,6 +670,11 @@
                        <version>${wicket-bootstrap.version}</version>
                </dependency>
                <dependency>
+                       <groupId>org.webjars</groupId>
+                       <artifactId>font-awesome</artifactId>
+                       <version>5.12.0</version>
+               </dependency>
+               <dependency>
                        <groupId>org.apache.commons</groupId>
                        <artifactId>commons-lang3</artifactId>
                </dependency>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
index 0ad1235..988f386 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
@@ -144,8 +144,8 @@ import com.hazelcast.core.MembershipListener;
 import de.agilecoders.wicket.core.Bootstrap;
 import de.agilecoders.wicket.core.settings.BootstrapSettings;
 import de.agilecoders.wicket.core.settings.IBootstrapSettings;
-import de.agilecoders.wicket.core.settings.SingleThemeProvider;
-import 
de.agilecoders.wicket.themes.markup.html.material_design.MaterialDesignTheme;
+import de.agilecoders.wicket.themes.markup.html.bootswatch.BootswatchTheme;
+import 
de.agilecoders.wicket.themes.markup.html.bootswatch.BootswatchThemeProvider;
 
 @Component
 public class Application extends AuthenticatedWebApplication implements 
IApplication {
@@ -275,7 +275,7 @@ public class Application extends 
AuthenticatedWebApplication implements IApplica
                });
                super.init();
                final IBootstrapSettings settings = new BootstrapSettings();
-               settings.setThemeProvider(new SingleThemeProvider(new 
MaterialDesignTheme()));
+               settings.setThemeProvider(new 
BootswatchThemeProvider(BootswatchTheme.Sandstone));//FIXME TODO new 
SingleThemeProvider(new MaterialDesignTheme())
                
Bootstrap.builder().withBootstrapSettings(settings).install(this);
 
                // register some widgets
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/Captcha.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/Captcha.html
index d83bf40..83fb55d 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/Captcha.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/Captcha.html
@@ -23,6 +23,6 @@
 <wicket:panel>
        <input type="text" wicket:id="captchaText" 
wicket:message="placeholder:captcha.text,title:captcha.text" 
class="captcha-text"/><br/>
        <img wicket:id="captcha" class="captcha-img"/>
-       <span wicket:id="refresh" 
wicket:message="alt:lbl.refresh,title:lbl.refresh"><wicket:message 
key="lbl.refresh"/></span>
+       <button wicket:id="refresh" 
wicket:message="alt:lbl.refresh,title:lbl.refresh"></button>
 </wicket:panel>
 </html>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/Captcha.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/Captcha.java
index 6f8f6df..7e6b3b5 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/Captcha.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/Captcha.java
@@ -25,6 +25,8 @@ import java.security.SecureRandom;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.extensions.markup.html.captcha.CaptchaImageResource;
+import org.apache.wicket.markup.head.CssHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.html.form.RequiredTextField;
 import org.apache.wicket.markup.html.image.Image;
 import org.apache.wicket.markup.html.panel.Panel;
@@ -34,10 +36,11 @@ import org.apache.wicket.validation.IValidatable;
 import org.apache.wicket.validation.IValidator;
 import org.apache.wicket.validation.ValidationError;
 
-import com.googlecode.wicket.jquery.core.JQueryBehavior;
-import com.googlecode.wicket.jquery.core.Options;
-import com.googlecode.wicket.jquery.ui.JQueryIcon;
-import com.googlecode.wicket.jquery.ui.markup.html.link.AjaxLink;
+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.image.Icon;
+import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesome5CssReference;
+import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesome5IconType;
 
 public class Captcha extends Panel {
        private static final long serialVersionUID = 1L;
@@ -88,19 +91,22 @@ public class Captcha extends Panel {
                                }
                        }
                }).setOutputMarkupId(true));
-               add(new AjaxLink<String>("refresh") {
+               add(new BootstrapAjaxLink<>("refresh", Model.of(""), 
Buttons.Type.Outline_Info, new ResourceModel("lbl.refresh")) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
+                       public void renderHead(IHeaderResponse response) {
+                               
response.render(CssHeaderItem.forReference(FontAwesome5CssReference.instance()));
+                       }
+
+                       @Override
                        public void onClick(AjaxRequestTarget target) {
                                captchaImageResource.invalidate();
                                target.add(captcha);
                        }
 
-                       @Override
-                       public void onConfigure(JQueryBehavior behavior) {
-                               behavior.setOption("icon", 
Options.asString(JQueryIcon.REFRESH));
-                               behavior.setOption("showLabel", false);
+                       protected Icon newIcon(String markupId) {
+                               return new Icon(markupId, 
FontAwesome5IconType.sync_s);
                        }
                });
        }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
index 605769a..3ac7238 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
@@ -80,9 +80,6 @@ public class MainPage extends BaseInitedPage {
 
        public MainPage() {
                super();
-               getHeader().setVisible(false);
-               add(mainContainer.add(new 
EmptyPanel(MAIN_PANEL_ID)).setOutputMarkupId(true));
-               add(delayedLoad);
        }
 
        public void updateContents(OmUrlFragment f, IPartialPageRequestHandler 
handler) {
@@ -90,6 +87,14 @@ public class MainPage extends BaseInitedPage {
        }
 
        @Override
+       protected void onInitialize() {
+               super.onInitialize();
+               getHeader().setVisible(false);
+               add(mainContainer.add(new 
EmptyPanel(MAIN_PANEL_ID)).setOutputMarkupId(true));
+               add(delayedLoad);
+       }
+
+       @Override
        protected boolean isMainPage() {
                return true;
        }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.html
index b2d5649..6b754a7 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.html
@@ -22,5 +22,6 @@
 <html xmlns:wicket="http://wicket.apache.org";>
 <wicket:extend>
        <div wicket:id="resetPassword"></div>
+       <div wicket:id="resetInfo"></div>
 </wicket:extend>
 </html>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.java
index 8660bf5..a497cbd 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.java
@@ -22,12 +22,26 @@ import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.pages.auth.ResetPasswordDialog;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal.Backdrop;
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.TextContentModal;
+
 public class ResetPage extends BaseNotInitedPage {
        private static final long serialVersionUID = 1L;
        public static final String RESET_PARAM = "hash";
+       private final Modal<String> resetInfo = new 
TextContentModal("resetInfo", new ResourceModel("332")) {
+               private static final long serialVersionUID = 1L;
+
+               @Override
+               protected void onClose(IPartialPageRequestHandler target) {
+                       setResponsePage(Application.get().getSignInPageClass());
+               }
+       };
        @SpringBean
        private UserDao userDao;
 
@@ -36,7 +50,11 @@ public class ResetPage extends BaseNotInitedPage {
                if (resetHash != null) {
                        User user = userDao.getUserByHash(resetHash);
                        if (user != null) {
-                               add(new ResetPasswordDialog("resetPassword", 
user));
+                               add(new ResetPasswordDialog("resetPassword", 
user, resetInfo));
+                               add(resetInfo.header(new ResourceModel("325"))
+                                               .addCloseButton(new 
ResourceModel("54"))
+                                               .setUseCloseHandler(true)
+                                               .setBackdrop(Backdrop.STATIC));
                                return;
                        }
                }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.html
index 3f5411d..a9d11d2 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.html
@@ -20,32 +20,31 @@
 -->
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org";>
-<wicket:panel>
-       <form wicket:id="form">
-               <table>
-                       <tr wicket:id="type">
-                               <td>
-                                       <label 
wicket:for="email"><wicket:message key="313" /></label>&nbsp;<input
-                                               type="radio" wicket:id="email" 
/>
-                               </td>
-                               <td>
-                                       <label 
wicket:for="login"><wicket:message key="314" /></label>&nbsp;<input
-                                               type="radio" wicket:id="login" 
/>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td><span wicket:id="label"></span></td>
-                               <td><input wicket:id="name" type="text" /></td>
-                       </tr>
-                       <tr>
-                               <td colspan="2">
-                                       <div wicket:id="captcha" 
class="centered"></div>
-                               </td>
-                       </tr>
-               </table>
-               <span wicket:id="feedback"></span>
+<wicket:extend>
+       <form wicket:id="form" class="signin-forget">
+               <div class="row form-group no-gutters" wicket:id="type">
+                       <div class="col-6">
+                               <div class="form-check form-check-inline">
+                                       <label class="form-check-label" 
wicket:for="email"><wicket:message key="313" /></label>
+                                       <input class="form-check-input" 
type="radio" wicket:id="email"/>
+                               </div>
+                       </div>
+                       <div class="col-5">
+                               <div class="form-check form-check-inline">
+                                       <label class="form-check-label" 
wicket:for="login"><wicket:message key="314" /></label>
+                                       <input class="form-check-input" 
type="radio" wicket:id="login"/>
+                               </div>
+                       </div>
+               </div>
+               <div class="row form-group no-gutters">
+                       <div class="col-6"><label wicket:for="name"><span 
wicket:id="label"></span></label></div>
+                       <div class="col-5"><input wicket:id="name" type="text" 
value=""/></div>
+               </div>
+               <div class="row form-group no-gutters">
+                       <div class="col-12 centered" wicket:id="captcha"></div>
+               </div>
+               <div wicket:id="feedback"></div>
                <input type="submit" wicket:id="submit" 
class="invisible-form-component"/>
        </form>
-       <div wicket:id="confirmDialog"></div>
-</wicket:panel>
+</wicket:extend>
 </html>
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 9be2f6b..f5d1570 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
@@ -23,9 +23,7 @@ import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getBaseUrl;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getMinLoginLength;
 import static org.apache.openmeetings.web.app.Application.urlForPage;
 
-import java.util.Arrays;
 import java.util.Date;
-import java.util.List;
 
 import org.apache.openmeetings.core.mail.MailHandler;
 import org.apache.openmeetings.db.dao.user.UserDao;
@@ -33,7 +31,6 @@ import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.service.mail.template.ResetPasswordTemplate;
 import org.apache.openmeetings.web.common.Captcha;
 import org.apache.openmeetings.web.pages.ResetPage;
-import org.apache.openmeetings.web.util.NonClosableMessageDialog;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
@@ -46,6 +43,7 @@ import org.apache.wicket.markup.html.form.RadioGroup;
 import org.apache.wicket.markup.html.form.RequiredTextField;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.apache.wicket.util.string.Strings;
@@ -55,80 +53,26 @@ import org.apache.wicket.validation.Validatable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-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.MessageDialog;
-
+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.common.NotificationPanel;
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 
-public class ForgetPasswordDialog extends AbstractFormDialog<String> {
+public class ForgetPasswordDialog extends Modal<String> {
        private static final Logger log = 
LoggerFactory.getLogger(ForgetPasswordDialog.class);
        private static final long serialVersionUID = 1L;
-       private DialogButton send;
-       private DialogButton cancel;
        private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        private final IValidator<String> emailValidator = 
RfcCompliantEmailAddressValidator.getInstance();
        private final RequiredTextField<String> name = new 
RequiredTextField<>("name", Model.of((String)null));
        private final RadioGroup<Type> rg = new RadioGroup<>("type", 
Model.of(Type.email));
        private final Label label = new Label("label", Model.of(""));
        private final Captcha captcha = new Captcha("captcha");
-       private Form<String> form = new Form<>("form") {
-               private static final long serialVersionUID = 1L;
-
-               @Override
-               protected void onInitialize() {
-                       super.onInitialize();
-                       add(feedback.setOutputMarkupId(true));
-                       
add(label.setDefaultModelObject(getString("315")).setOutputMarkupId(true));
-                       add(name.setOutputMarkupId(true));
-                       add(captcha);
-                       add(rg.add(new Radio<>("email", Model.of(Type.email)))
-                                       .add(new Radio<>("login", 
Model.of(Type.login)))
-                                       .setOutputMarkupId(true));
-                       rg.add(new AjaxFormChoiceComponentUpdatingBehavior() {
-                               private static final long serialVersionUID = 1L;
-
-                               @Override
-                               protected void onUpdate(AjaxRequestTarget 
target) {
-                                       updateLabel(target);
-                               }
-                       });
-                       add(new AjaxButton("submit") { //FAKE button so 
"submit-on-enter" works as expected
-                               private static final long serialVersionUID = 1L;
-
-                               @Override
-                               protected void onSubmit(AjaxRequestTarget 
target) {
-                                       
ForgetPasswordDialog.this.onSubmit(target, send);
-                               }
-
-                               @Override
-                               protected void onError(AjaxRequestTarget 
target) {
-                                       
ForgetPasswordDialog.this.onError(target, send);
-                               }
-                       });
-                       updateLabel(null);
-               }
-
-               @Override
-               protected void onValidate() {
-                       String n = name.getConvertedInput();
-                       if (n != null) {
-                               IValidatable<String> val = new Validatable<>(n);
-                               Type type = rg.getConvertedInput();
-                               if (type == Type.email) {
-                                       emailValidator.validate(val);
-                                       if (!val.isValid()) {
-                                               error(getString("234"));
-                                       }
-                               }
-                               if (type == Type.login && n.length() < 
getMinLoginLength()) {
-                                       error(getString("104"));
-                               }
-                       }
-               }
-       };
+       private ForgetPasswordForm form = new ForgetPasswordForm("form");
        private SignInDialog s;
-       MessageDialog confirmDialog;
+       private final Modal<String> forgetInfoDialog;
+       private boolean wasReset = false;
+
        @SpringBean
        private UserDao userDao;
        @SpringBean
@@ -139,25 +83,30 @@ public class ForgetPasswordDialog extends 
AbstractFormDialog<String> {
                , login
        }
 
-       public ForgetPasswordDialog(String id) {
-               super(id, "");
+       public ForgetPasswordDialog(String id, Modal<String> forgetInfoDialog) {
+               super(id);
+               this.forgetInfoDialog = forgetInfoDialog;
        }
 
        @Override
        protected void onInitialize() {
-               setTitle(new ResourceModel("312"));
-               send = new DialogButton("send", getString("317"));
-               cancel = new DialogButton("cancel", getString("lbl.cancel"));
-               add(form);
-               confirmDialog = new NonClosableMessageDialog("confirmDialog", 
getString("312"), getString("321")) {
+               header(new ResourceModel("312"));
+               setCloseOnEscapeKey(true);
+               setUseCloseHandler(true);
+               setBackdrop(Backdrop.STATIC);
+
+               addButton(new BootstrapAjaxButton("button", new 
ResourceModel("317"), form, Buttons.Type.Primary) {
+                       private static final long serialVersionUID = 1L;
+               }); // Send
+               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Secondary, new ResourceModel("lbl.cancel")) {
                        private static final long serialVersionUID = 1L;
 
-                       @Override
-                       public void onClose(IPartialPageRequestHandler handler, 
DialogButton button) {
-                               s.open(handler);
+                       public void onClick(AjaxRequestTarget target) {
+                               ForgetPasswordDialog.this.close(target);
                        }
-               };
-               add(confirmDialog);
+               });
+
+               add(form);
                super.onInitialize();
        }
 
@@ -171,26 +120,22 @@ public class ForgetPasswordDialog extends 
AbstractFormDialog<String> {
        }
 
        @Override
-       protected void onOpen(IPartialPageRequestHandler handler) {
-               super.onOpen(handler);
+       public Modal<String> show(IPartialPageRequestHandler handler) {
                name.setModelObject(null);
                rg.setModelObject(Type.email);
                captcha.refresh(handler);
                handler.add(rg);
                updateLabel(handler);
+               wasReset = false;
+               return super.show(handler);
        }
 
        @Override
-       public boolean isDefaultCloseEventEnabled()     {
-               return true;
-       }
-
-       @Override
-       public void onClose(IPartialPageRequestHandler handler, DialogButton 
button) {
-               if (send.equals(button)){
-                       confirmDialog.open(handler);
+       public void onClose(IPartialPageRequestHandler handler) {
+               if (wasReset) {
+                       forgetInfoDialog.show(handler);
                } else {
-                       s.open(handler);
+                       s.show(handler);
                }
        }
 
@@ -198,33 +143,6 @@ public class ForgetPasswordDialog extends 
AbstractFormDialog<String> {
                this.s = s;
        }
 
-       @Override
-       protected List<DialogButton> getButtons() {
-               return Arrays.asList(send, cancel);
-       }
-
-       @Override
-       public DialogButton getSubmitButton() {
-               return send;
-       }
-
-       @Override
-       public Form<?> getForm() {
-               return form;
-       }
-
-       @Override
-       protected void onError(AjaxRequestTarget target, DialogButton btn) {
-               target.add(feedback);
-       }
-
-       @Override
-       protected void onSubmit(AjaxRequestTarget target, DialogButton btn) {
-               String nm = name.getModelObject();
-               Type type = rg.getModelObject();
-               resetUser(type == Type.email ? nm : "", type == Type.login ? nm 
: "");
-       }
-
        /**
         * reset a username by a given mail oder login by sending a mail to the
         * registered EMail-Address
@@ -272,4 +190,86 @@ public class ForgetPasswordDialog extends 
AbstractFormDialog<String> {
 
                mailHandler.send(email, getString("517"), template);
        }
+
+       private class ForgetPasswordForm extends Form<String> {
+               private static final long serialVersionUID = 1L;
+
+               public ForgetPasswordForm(String id) {
+                       super(id);
+               }
+
+               @Override
+               protected void onInitialize() {
+                       super.onInitialize();
+                       add(feedback.setOutputMarkupId(true));
+                       
add(label.setDefaultModelObject(getString("315")).setOutputMarkupId(true));
+                       add(name.setOutputMarkupId(true));
+                       add(captcha);
+                       add(rg.add(new Radio<>("email", Model.of(Type.email)))
+                                       .add(new Radio<>("login", 
Model.of(Type.login)))
+                                       .setOutputMarkupId(true));
+                       rg.add(new AjaxFormChoiceComponentUpdatingBehavior() {
+                               private static final long serialVersionUID = 1L;
+
+                               @Override
+                               protected void onUpdate(AjaxRequestTarget 
target) {
+                                       updateLabel(target);
+                               }
+                       });
+                       add(new AjaxButton("submit") { //FAKE button so 
"submit-on-enter" works as expected
+                               private static final long serialVersionUID = 1L;
+
+                               @Override
+                               protected void onSubmit(AjaxRequestTarget 
target) {
+                                       
ForgetPasswordForm.this.onSubmit(target);
+                               }
+
+                               @Override
+                               protected void onError(AjaxRequestTarget 
target) {
+                                       ForgetPasswordForm.this.onError(target);
+                               }
+                       });
+                       updateLabel(null);
+               }
+
+               @Override
+               protected void onValidate() {
+                       String n = name.getConvertedInput();
+                       if (n != null) {
+                               IValidatable<String> val = new Validatable<>(n);
+                               Type type = rg.getConvertedInput();
+                               if (type == Type.email) {
+                                       emailValidator.validate(val);
+                                       if (!val.isValid()) {
+                                               error(getString("234"));
+                                       }
+                               }
+                               if (type == Type.login && n.length() < 
getMinLoginLength()) {
+                                       error(getString("104"));
+                               }
+                       }
+               }
+
+               @Override
+               protected void onError() {
+                       
RequestCycle.get().find(AjaxRequestTarget.class).ifPresent(this::onError);
+               }
+
+               private void onError(AjaxRequestTarget target) {
+                       target.add(feedback);
+               }
+
+               @Override
+               protected void onSubmit() {
+                       
RequestCycle.get().find(AjaxRequestTarget.class).ifPresent(this::onSubmit);
+               }
+
+               private void onSubmit(AjaxRequestTarget target) {
+                       String nm = name.getModelObject();
+                       Type type = rg.getModelObject();
+                       resetUser(type == Type.email ? nm : "", type == 
Type.login ? nm : "");
+                       wasReset = true;
+                       ForgetPasswordDialog.this.close(target);
+               }
+       };
 }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.html
index dafe6c8..ee087a1 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.html
@@ -20,28 +20,24 @@
 -->
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org";>
-<wicket:panel>
+<wicket:extend>
        <form wicket:id="form">
-               <table>
-                       <tr>
-                               <td><input wicket:id="firstName" type="text" 
wicket:message="placeholder:117" value="" /></td>
-                               <td><input wicket:id="lastName" type="text" 
wicket:message="placeholder:136" value="" /></td>
-                       </tr>
-                       <tr>
-                               <td><input wicket:id="login" type="text" 
wicket:message="placeholder:114" value="" /></td>
-                               <td><input wicket:id="email" type="text" 
wicket:message="placeholder:119" value="" /></td>
-                       </tr>
-                       <tr>
-                               <td><input wicket:id="password" type="password" 
wicket:message="placeholder:110" value="" /></td>
-                               <td><input wicket:id="confirmPassword" 
type="password" wicket:message="placeholder:116" value="" /></td>
-                       </tr>
-                       <tr>
-                               <td colspan="2">
-                                       <div wicket:id="captcha" 
class="centered"></div>
-                               </td>
-                       </tr>
-               </table>
-               <span wicket:id="feedback" class="error"></span>
+               <div class="row form-group no-gutters">
+                       <div class="col-6"><input wicket:id="firstName" 
type="text" wicket:message="placeholder:117" value=""/></div>
+                       <div class="col-6"><input wicket:id="lastName" 
type="text" wicket:message="placeholder:136" value=""/></div>
+               </div>
+               <div class="row form-group no-gutters">
+                       <div class="col-6"><input wicket:id="login" type="text" 
wicket:message="placeholder:114" value=""/></div>
+                       <div class="col-6"><input wicket:id="email" type="text" 
wicket:message="placeholder:119" value=""/></div>
+               </div>
+               <div class="row form-group no-gutters">
+                       <div class="col-6"><input wicket:id="password" 
type="password" wicket:message="placeholder:110" value=""/></div>
+                       <div class="col-6"><input wicket:id="confirmPassword" 
type="password" wicket:message="placeholder:116" value=""/></div>
+               </div>
+               <div class="row form-group no-gutters">
+                       <div class="col-12 centered" wicket:id="captcha"></div>
+               </div>
+               <div wicket:id="feedback" class="error"></div>
                <input type="submit" wicket:id="submit" 
class="invisible-form-component"/>
        </form>
        <div>
@@ -50,6 +46,5 @@
                        <a wicket:id="link" target="_blank"><wicket:message 
key="register.privacy.statement"/></a>
                </wicket:message>
        </div>
-       <div wicket:id="confirmRegistration"></div>
-</wicket:panel>
+</wicket:extend>
 </html>
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 df7fdd1..581fad4 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
@@ -24,9 +24,6 @@ import static 
org.apache.openmeetings.util.OpenmeetingsVariables.isSendRegisterE
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.isSendVerificationEmail;
 import static 
org.apache.wicket.validation.validator.StringValidator.minimumLength;
 
-import java.util.Arrays;
-import java.util.List;
-
 import org.apache.openmeetings.core.util.StrongPasswordValidator;
 import org.apache.openmeetings.db.dao.user.IUserManager;
 import org.apache.openmeetings.db.dao.user.UserDao;
@@ -35,14 +32,11 @@ import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.Captcha;
 import org.apache.openmeetings.web.pages.PrivacyPage;
-import org.apache.openmeetings.web.util.NonClosableDialog;
-import org.apache.openmeetings.web.util.NonClosableMessageDialog;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import 
org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.PasswordTextField;
 import org.apache.wicket.markup.html.form.RequiredTextField;
 import org.apache.wicket.markup.html.form.StatelessForm;
@@ -51,25 +45,25 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.validation.IValidatable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
-
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxLink;
+import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
+import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.ladda.LaddaAjaxButton;
 
-public class RegisterDialog extends NonClosableDialog<String> {
+public class RegisterDialog extends Modal<String> {
        private static final long serialVersionUID = 1L;
        private static final Logger log = 
LoggerFactory.getLogger(RegisterDialog.class);
-       private DialogButton cancelBtn;
-       private DialogButton registerBtn;
        private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        private final IModel<String> tzModel = 
Model.of(WebSession.get().getClientTZCode());
-       private RegisterForm form;
+       private final RegisterForm form = new RegisterForm("form");
        private SignInDialog s;
        private Captcha captcha;
        private String firstName;
@@ -79,8 +73,9 @@ public class RegisterDialog extends NonClosableDialog<String> 
{
        private String email;
        private String country;
        private Long lang;
+       private boolean wasRegistered = false;
 
-       MessageDialog confirmRegistration;
+       private final Modal<String> registerInfo;
        private boolean sendConfirmation = false;
        private boolean sendEmailAtRegister = false;
        @SpringBean
@@ -88,34 +83,28 @@ public class RegisterDialog extends 
NonClosableDialog<String> {
        @SpringBean
        private UserDao userDao;
 
-       public RegisterDialog(String id) {
-               super(id, "");
-               add(form = new RegisterForm("form"));
-               form.setOutputMarkupId(true);
+       public RegisterDialog(String id, Modal<String> registerInfo) {
+               super(id);
+               this.registerInfo = registerInfo;
        }
 
        @Override
        protected void onInitialize() {
-               getTitle().setObject(getString("113"));
-               cancelBtn = new DialogButton("cancel", getString("lbl.cancel"));
-               registerBtn = new DialogButton("register", getString("121")) {
-                       private static final long serialVersionUID = 1L;
+               header(new ResourceModel("113"));
+               setCloseOnEscapeKey(true);
+               setUseCloseHandler(true);
+               setBackdrop(Backdrop.STATIC);
 
-                       @Override
-                       public boolean isIndicating() {
-                               return true;
-                       }
-               };
-               confirmRegistration = new 
NonClosableMessageDialog("confirmRegistration", getString("235"), 
getString("warn.notverified")) {
+               addButton(new LaddaAjaxButton("button", new 
ResourceModel("121"), form, Buttons.Type.Primary)); // register
+               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Secondary, new ResourceModel("lbl.cancel")) {
                        private static final long serialVersionUID = 1L;
 
-                       @Override
-                       public void onClose(IPartialPageRequestHandler handler, 
DialogButton button) {
-                               s.open(handler);
+                       public void onClick(AjaxRequestTarget target) {
+                               RegisterDialog.this.close(target);
                        }
-               };
+               });
+               add(form);
                add(new Label("register", 
getString("121")).setRenderBodyOnly(true), new BookmarkablePageLink<>("link", 
PrivacyPage.class));
-               add(confirmRegistration);
                reset(null);
                super.onInitialize();
        }
@@ -128,17 +117,8 @@ public class RegisterDialog extends 
NonClosableDialog<String> {
                tzModel.setObject(WebSession.get().getClientTZCode());
        }
 
-       @Override
-       public int getWidth() {
-               return 400;
-       }
-
-       @Override
-       protected List<DialogButton> getButtons() {
-               return Arrays.asList(registerBtn, cancelBtn);
-       }
-
        public void reset(IPartialPageRequestHandler handler) {
+               wasRegistered = false;
                firstName = null;
                lastName = null;
                login = null;
@@ -151,7 +131,7 @@ public class RegisterDialog extends 
NonClosableDialog<String> {
        }
 
        @Override
-       protected void onOpen(IPartialPageRequestHandler handler) {
+       public Modal<String> show(IPartialPageRequestHandler handler) {
                String baseURL = getBaseUrl();
                sendEmailAtRegister = isSendRegisterEmail();
                sendConfirmation = !Strings.isEmpty(baseURL) && 
isSendVerificationEmail();
@@ -159,45 +139,18 @@ public class RegisterDialog extends 
NonClosableDialog<String> {
                if (sendConfirmation && sendEmailAtRegister) {
                        messageCode = "warn.notverified";
                }
-               confirmRegistration.setModelObject(getString(messageCode));
+               registerInfo.setModelObject(getString(messageCode));
+               handler.add(registerInfo.get("content"));
                reset(handler);
                handler.add(form);
+               return super.show(handler);
        }
 
        @Override
-       public void onClose(IPartialPageRequestHandler handler, DialogButton 
button) {
-               if (!registerBtn.equals(button)) {
-                       s.open(handler);
-               }
-       }
-
-       @Override
-       public DialogButton getSubmitButton() {
-               return registerBtn;
-       }
-
-       @Override
-       public Form<Void> getForm() {
-               return form;
-       }
-
-       @Override
-       protected void onError(AjaxRequestTarget target, DialogButton btn) {
-               target.add(feedback);
-       }
-
-       @Override
-       protected void onSubmit(AjaxRequestTarget target, DialogButton btn) {
-               try {
-                       Object o = userManager.registerUser(login, password, 
lastName
-                                       , firstName, email, country, lang, 
tzModel.getObject());
-                       if (o instanceof String) {
-                               
confirmRegistration.setModelObject(getString((String)o));
-                       }
-               } catch (Exception e) {
-                       log.error("[registerUser]", e);
+       public void onClose(IPartialPageRequestHandler handler) {
+               if (!wasRegistered) {
+                       s.show(handler);
                }
-               confirmRegistration.open(target);
        }
 
        @Override
@@ -217,6 +170,12 @@ public class RegisterDialog extends 
NonClosableDialog<String> {
 
                public RegisterForm(String id) {
                        super(id);
+                       setOutputMarkupId(true);
+               }
+
+               @Override
+               protected void onInitialize() {
+                       super.onInitialize();
                        add(feedback.setOutputMarkupId(true));
                        add(firstNameField = new 
RequiredTextField<>("firstName", new PropertyModel<String>(RegisterDialog.this, 
"firstName")));
                        add(lastNameField = new RequiredTextField<>("lastName", 
new PropertyModel<String>(RegisterDialog.this, "lastName")));
@@ -225,11 +184,6 @@ public class RegisterDialog extends 
NonClosableDialog<String> {
                        add(confirmPassword = new 
PasswordTextField("confirmPassword", new 
Model<String>()).setResetPassword(true));
                        add(emailField = new RequiredTextField<>("email", new 
PropertyModel<String>(RegisterDialog.this, "email")));
                        add(captcha = new Captcha("captcha"));
-               }
-
-               @Override
-               protected void onInitialize() {
-                       super.onInitialize();
                        firstNameField.setLabel(new ResourceModel("117"));
                        lastNameField.setLabel(new ResourceModel("136"));
                        
loginField.add(minimumLength(getMinLoginLength())).setLabel(new 
ResourceModel("114"));
@@ -253,12 +207,12 @@ public class RegisterDialog extends 
NonClosableDialog<String> {
 
                                @Override
                                protected void onSubmit(AjaxRequestTarget 
target) {
-                                       RegisterDialog.this.onSubmit(target, 
registerBtn);
+                                       RegisterForm.this.onSubmit(target);
                                }
 
                                @Override
                                protected void onError(AjaxRequestTarget 
target) {
-                                       RegisterDialog.this.onError(target, 
registerBtn);
+                                       RegisterForm.this.onError(target);
                                }
                        });
                }
@@ -284,5 +238,35 @@ public class RegisterDialog extends 
NonClosableDialog<String> {
                                }
                        }
                }
+
+               @Override
+               protected void onError() {
+                       
RequestCycle.get().find(AjaxRequestTarget.class).ifPresent(this::onError);
+               }
+
+               private void onError(AjaxRequestTarget target) {
+                       target.add(feedback);
+               }
+
+               @Override
+               protected void onSubmit() {
+                       
RequestCycle.get().find(AjaxRequestTarget.class).ifPresent(this::onSubmit);
+               }
+
+               private void onSubmit(AjaxRequestTarget target) {
+                       wasRegistered = true;
+                       try {
+                               Object o = userManager.registerUser(login, 
password, lastName
+                                               , firstName, email, country, 
lang, tzModel.getObject());
+                               if (o instanceof String) {
+                                       
registerInfo.setModelObject(getString((String)o));
+                                       target.add(registerInfo.get("content"));
+                               }
+                       } catch (Exception e) {
+                               log.error("[registerUser]", e);
+                       }
+                       RegisterDialog.this.close(target);
+                       registerInfo.show(target);
+               }
        }
 }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html
index 906cee8..2d8f9c5 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html
@@ -20,25 +20,22 @@
 -->
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org";>
-<wicket:panel>
+<wicket:extend>
        <form wicket:id="form">
-               <table>
-                       <tr>
-                               <td><label wicket:for="login"><wicket:message 
key="314" /></label></td>
-                               <td><input type="text" readonly="readonly" 
wicket:id="login" /></td>
-                       </tr>
-                       <tr>
-                               <td><label 
wicket:for="password"><wicket:message key="328" /></label></td>
-                               <td><input type="password" wicket:id="password" 
/></td>
-                       </tr>
-                       <tr>
-                               <td><label 
wicket:for="confirmPassword"><wicket:message key="116" /></label></td>
-                               <td><input type="password" 
wicket:id="confirmPassword" /></td>
-                       </tr>
-               </table>
-               <span wicket:id="feedback"></span>
+               <div class="row form-group no-gutters">
+                       <div class="desc col-6"><label 
wicket:for="login"><wicket:message key="314"/></label></div>
+                       <div class="col-5"><input type="text" 
readonly="readonly" wicket:id="login"/></div>
+               </div>
+               <div class="row form-group no-gutters">
+                       <div class="desc col-6"><label 
wicket:for="password"><wicket:message key="328"/></label></div>
+                       <div class="col-5"><input type="password" 
wicket:id="password"/></div>
+               </div>
+               <div class="row form-group no-gutters">
+                       <div class="desc col-6"><label 
wicket:for="confirmPassword"><wicket:message key="116"/></label></div>
+                       <div class="col-5"><input type="password" 
wicket:id="confirmPassword"/></div>
+               </div>
+               <div wicket:id="feedback" class="error"></div>
                <input type="submit" wicket:id="submit" 
class="invisible-form-component"/>
        </form>
-       <div wicket:id="confirmReset"></div>
-</wicket:panel>
+</wicket:extend>
 </html>
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 d388b41..1d945bc 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
@@ -18,109 +18,56 @@
  */
 package org.apache.openmeetings.web.pages.auth;
 
-import java.util.Arrays;
-import java.util.List;
-
 import org.apache.openmeetings.core.util.StrongPasswordValidator;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.util.NonClosableDialog;
-import org.apache.openmeetings.web.util.NonClosableMessageDialog;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
-import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.PasswordTextField;
 import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
-import com.googlecode.wicket.jquery.core.JQueryBehavior;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
-
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxButton;
+import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 
-public class ResetPasswordDialog extends NonClosableDialog<String> {
+public class ResetPasswordDialog extends Modal<String> {
        private static final long serialVersionUID = 1L;
-       private DialogButton resetBtn;
        private Form<String> form = new ResetForm("form");
        private final NotificationPanel feedback = new 
NotificationPanel("feedback");
        private PasswordTextField password;
        private final User user;
-       MessageDialog confirmReset;
+       private final Modal<String> resetInfo;
+
        @SpringBean
        private UserDao userDao;
 
-       public ResetPasswordDialog(String id, final User user) {
-               super(id, "");
+       public ResetPasswordDialog(String id, final User user, Modal<String> 
resetInfo) {
+               super(id);
                this.user = user;
+               this.resetInfo = resetInfo;
        }
 
        @Override
        protected void onInitialize() {
-               getTitle().setObject(getString("325"));
-               resetBtn = new DialogButton("reset", getString("327"));
+               header(new ResourceModel("325"));
+               setCloseOnEscapeKey(false);
+               setBackdrop(Backdrop.STATIC);
+               show(true);
+
                add(form);
-               confirmReset = new NonClosableMessageDialog("confirmReset", 
getString("325"), getString("332")) {
+               addButton(new BootstrapAjaxButton("button", new 
ResourceModel("327"), form, Buttons.Type.Primary) {
                        private static final long serialVersionUID = 1L;
-
-                       @Override
-                       public void onClose(IPartialPageRequestHandler handler, 
DialogButton button) {
-                               
setResponsePage(Application.get().getSignInPageClass());
-                       }
-               };
-               add(confirmReset);
+               }); // Reset
 
                super.onInitialize();
        }
 
-       @Override
-       public void onConfigure(JQueryBehavior behavior) {
-               super.onConfigure(behavior);
-               behavior.setOption("autoOpen", true);
-       }
-
-       @Override
-       protected List<DialogButton> getButtons() {
-               return Arrays.asList(resetBtn);
-       }
-
-       @Override
-       public DialogButton getSubmitButton() {
-               return resetBtn;
-       }
-
-       @Override
-       public Form<?> getForm() {
-               return form;
-       }
-
-       @Override
-       protected void onError(AjaxRequestTarget target, DialogButton btn) {
-               target.add(feedback);
-       }
-
-       @Override
-       protected void onSubmit(AjaxRequestTarget target, DialogButton btn) {
-               try {
-                       userDao.resetPassword(user, 
password.getConvertedInput());
-               } catch (Exception e) {
-                       error(e.getMessage());
-               }
-       }
-
-       @Override
-       public void onClose(IPartialPageRequestHandler handler, DialogButton 
button) {
-               if (resetBtn.equals(button)) {
-                       confirmReset.open(handler);
-               } else {
-                       setResponsePage(Application.get().getSignInPageClass());
-               }
-       }
-
        private class ResetForm extends Form<String> {
                private static final long serialVersionUID = 1L;
                private TextField<String> login;
@@ -147,12 +94,12 @@ public class ResetPasswordDialog extends 
NonClosableDialog<String> {
 
                                @Override
                                protected void onSubmit(AjaxRequestTarget 
target) {
-                                       
ResetPasswordDialog.this.onSubmit(target, resetBtn);
+                                       ResetForm.this.onSubmit(target);
                                }
 
                                @Override
                                protected void onError(AjaxRequestTarget 
target) {
-                                       
ResetPasswordDialog.this.onError(target, resetBtn);
+                                       ResetForm.this.onError(target);
                                }
                        });
                }
@@ -165,5 +112,29 @@ public class ResetPasswordDialog extends 
NonClosableDialog<String> {
                        }
                        super.onValidate();
                }
+
+               @Override
+               protected void onError() {
+                       
RequestCycle.get().find(AjaxRequestTarget.class).ifPresent(this::onError);
+               }
+
+               protected void onError(AjaxRequestTarget target) {
+                       target.add(feedback);
+               }
+
+               @Override
+               protected void onSubmit() {
+                       
RequestCycle.get().find(AjaxRequestTarget.class).ifPresent(this::onSubmit);
+               }
+
+               protected void onSubmit(AjaxRequestTarget target) {
+                       try {
+                               userDao.resetPassword(user, 
password.getConvertedInput());
+                               ResetPasswordDialog.this.close(target);
+                               resetInfo.show(target);
+                       } catch (Exception e) {
+                               error(e.getMessage());
+                       }
+               }
        }
 }
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 9031594..d510a92 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
@@ -20,44 +20,42 @@
 -->
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org";>
-<wicket:panel>
+<wicket:extend>
        <form wicket:id="signin" class="signin">
-               <table>
-                       <tr>
-                               <td>
-                                       <table>
-                                               <tr>
-                                                       <td 
class="desc"><wicket:message key="109" /></td>
-                                                       <td><input 
wicket:id="login" type="text" value="" /></td>
-                                               </tr>
-                                               <tr>
-                                                       <td 
class="desc"><wicket:message key="110" /></td>
-                                                       <td><input 
wicket:id="pass" type="password" value="" /></td>
-                                               </tr>
-                                               <tr wicket:id="ldap">
-                                                       <td 
class="desc"><wicket:message key="1118" /></td>
-                                                       <td><select 
wicket:id="domain"></select></td>
-                                               </tr>
-                                               <tr>
-                                                       <td></td>
-                                                       <td 
class="remember"><input wicket:id="rememberMe"
-                                                               type="checkbox" 
/><label wicket:for="rememberMe"><wicket:message key="288" /></label></td>
-                                               </tr>
-                                               <tr>
-                                                       <td><a 
wicket:id="forget"><wicket:message key="311"/></a></td>
-                                                       <td><a 
wicket:id="netTest" target="_blank"><wicket:message key="1527"/></a></td>
-                                               </tr>
-                                       </table>
-                               </td>
-                               <td wicket:id="oauthContainer" 
class="oauth-section">
-                                       <div wicket:id="oauthList">
-                                               <button 
wicket:id="oauthBtn"><span class="provider" wicket:id="label"></span></button>
+               <div class="row no-gutters">
+                       <div wicket:id="credentials">
+                               <div class="row form-group no-gutters">
+                                       <div class="desc col-6"><label 
wicket:for="login"><wicket:message key="109"/></label></div>
+                                       <div class="col-5"><input 
wicket:id="login" type="text" value=""/></div>
+                               </div>
+                               <div class="row form-group no-gutters">
+                                       <div class="desc col-6"><label 
wicket:for="pass"><wicket:message key="110"/></label></div>
+                                       <div class="col-5"><input 
wicket:id="pass" type="password" value=""/></div>
+                               </div>
+                               <div class="row form-group no-gutters" 
wicket:id="ldap">
+                                       <div class="desc col-6"><label 
wicket:for="domain"><wicket:message key="1118"/></label></div>
+                                       <div class="col-5"><select 
wicket:id="domain"></select></div>
+                               </div>
+                               <div class="row form-group no-gutters">
+                                       <div class="col-6"></div>
+                                       <div class="col-5 remember">
+                                               <input wicket:id="rememberMe" 
type="checkbox" />
+                                               <label 
wicket:for="rememberMe"><wicket:message key="288" /></label>
                                        </div>
-                               </td>
-                       </tr>
-               </table>
-               <span wicket:id="feedback" class="error"></span>
+                               </div>
+                       </div>
+                       <div wicket:id="oauth" class="oauth-section col-4">
+                               <div wicket:id="oauthList">
+                                       <button wicket:id="oauthBtn"><span 
class="provider" wicket:id="label"></span></button>
+                               </div>
+                       </div>
+               </div>
+               <div wicket:id="feedback" class="error"></div>
+               <div class="row no-gutters">
+                       <div class="col-6"><a class="text-primary" 
wicket:id="forget"><wicket:message key="311"/></a></div>
+                       <div class="col-5"><a class="text-primary" 
wicket:id="netTest" target="_blank"><wicket:message key="1527"/></a></div>
+               </div>
                <input type="submit" wicket:id="submit" 
class="invisible-form-component"/>
        </form>
-</wicket:panel>
+</wicket:extend>
 </html>
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 d89cfb0..88f3bc2 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
@@ -24,7 +24,6 @@ import static org.apache.openmeetings.web.pages.HashPage.APP;
 import static org.apache.openmeetings.web.pages.HashPage.APP_TYPE_NETWORK;
 import static org.apache.openmeetings.web.pages.auth.SignInPage.showAuth;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
@@ -39,14 +38,12 @@ import 
org.apache.openmeetings.web.app.OmAuthenticationStrategy;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.OmAjaxClientInfoBehavior;
 import org.apache.openmeetings.web.pages.HashPage;
-import org.apache.openmeetings.web.util.NonClosableDialog;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.RestartResponseException;
 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.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.CheckBox;
@@ -68,27 +65,26 @@ import org.apache.wicket.util.string.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.googlecode.wicket.jquery.core.JQueryBehavior;
 import com.googlecode.wicket.jquery.ui.effect.JQueryEffectBehavior;
 import com.googlecode.wicket.jquery.ui.form.button.Button;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
 
+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.extensions.markup.html.bootstrap.ladda.LaddaAjaxButton;
 
-public class SignInDialog extends NonClosableDialog<String> {
+public class SignInDialog extends Modal<String> {
        private static final long serialVersionUID = 1L;
        private static final Logger log = 
LoggerFactory.getLogger(SignInDialog.class);
        private Form<String> form;
-       private DialogButton loginBtn;
-       private DialogButton registerBtn;
        private final PasswordTextField passField = new 
PasswordTextField("pass", Model.of(""));
        private final RequiredTextField<String> loginField = new 
RequiredTextField<>("login", Model.of(""));
        private boolean rememberMe = false;
-       private RegisterDialog r;
+       private RegisterDialog register;
        private ForgetPasswordDialog f;
        private LdapConfig domain;
-       private SignInPage page;
-       private final NotificationPanel feedback = new 
NotificationPanel("feedback");
+       private NotificationPanel feedback = new NotificationPanel("feedback");
        @SpringBean
        private ConfigurationDao cfgDao;
        @SpringBean
@@ -96,168 +92,86 @@ public class SignInDialog extends 
NonClosableDialog<String> {
        @SpringBean
        private OAuth2Dao oauthDao;
 
-       public SignInDialog(String id, SignInPage page) {
-               super(id, "");
-               this.page = page;
-               add(form = new SignInForm("signin"));
+       public SignInDialog(String id) {
+               super(id);
                add(new OmAjaxClientInfoBehavior());
        }
 
        @Override
        protected void onInitialize() {
-               getTitle().setObject(getString("108"));
-               loginBtn = new DialogButton("login", getString("112")) {
+               add(form = new SignInForm("signin"));
+               header(new ResourceModel("108"));
+               show(true);
+               setCloseOnEscapeKey(false);
+               setBackdrop(Backdrop.STATIC);
+               addButton(new BootstrapAjaxLink<>("button", Model.of(""), 
Buttons.Type.Secondary, new ResourceModel("123")) {
                        private static final long serialVersionUID = 1L;
 
-                       @Override
-                       public boolean isIndicating() {
-                               return true;
+                       public void onClick(AjaxRequestTarget target) {
+                               SignInDialog.this.close(target);
+                               register.setClientTimeZone();
+                               register.show(target);
                        }
-               };
-               registerBtn = new DialogButton("register", getString("123"));
-               super.onInitialize();
-       }
-
-       public void setRegisterDialog(RegisterDialog r) {
-               this.r = r;
-       }
-
-       public void setForgetPasswordDialog(ForgetPasswordDialog f) {
-               this.f = f;
-       }
+               });
+               addButton(new LaddaAjaxButton("button", new 
ResourceModel("112"), form, Buttons.Type.Primary)); // Login
 
-       @Override
-       public void onConfigure(JQueryBehavior behavior) {
-               super.onConfigure(behavior);
-               behavior.setOption("autoOpen", true);
-       }
-
-       @Override
-       public boolean isResizable() {
-               return false;
-       }
-
-       @Override
-       public boolean isDefaultCloseEventEnabled() {
-               return false;
-       }
-
-       @Override
-       public int getWidth() {
-               return page.allowOAuthLogin()? 550: 450;
-       }
-
-       @Override
-       public void onClose(IPartialPageRequestHandler handler, DialogButton 
button) {
-               if (registerBtn.equals(button)) {
-                       r.setClientTimeZone();
-                       r.open(handler);
-               }
+               super.onInitialize();
        }
 
        @Override
-       protected List<DialogButton> getButtons() {
-               List<DialogButton> list = new ArrayList<>();
-               if (page.allowRegister()) {
-                       list.add(registerBtn);
-               }
-               list.add(loginBtn);
-               return list;
+       protected Component createHeaderCloseButton(String id) {
+               return super.createHeaderCloseButton(id).setVisible(false);
        }
 
-       @Override
-       public DialogButton getSubmitButton() {
-               return loginBtn;
+       public void setRegisterDialog(RegisterDialog r) {
+               this.register = r;
        }
 
-       @Override
-       public Form<String> getForm() {
-               return form;
+       public void setForgetPasswordDialog(ForgetPasswordDialog f) {
+               this.f = f;
        }
 
        private void shake(AjaxRequestTarget target) {
                target.appendJavaScript(JQueryEffectBehavior.toString("#" + 
getMarkupId(), "shake"));
        }
 
-       @Override
-       public void onClick(AjaxRequestTarget target, DialogButton button) {
-               if (registerBtn.equals(button) || 
WebSession.get().isSignedIn()) {
-                       super.onClick(target, button);
-               }
-       }
-
-       @Override
-       protected void onError(AjaxRequestTarget target, DialogButton btn) {
-               shake(target);
-       }
-
-       @Override
-       protected void onSubmit(AjaxRequestTarget target, DialogButton btn) {
-               final String login = 
String.format(domain.getAddDomainToUserName() ? "%s@%s" : "%s"
-                               , loginField.getModelObject(), 
domain.getDomain());
-               final String password = passField.getModelObject();
-               OmAuthenticationStrategy strategy = getAuthenticationStrategy();
-               WebSession ws = WebSession.get();
-               Type type = domain.getId() > 0 ? Type.ldap : Type.user;
-               boolean signIn = false;
-               try {
-                       signIn = ws.signIn(login, password, type, 
domain.getId());
-               } catch (OmException e) {
-                       error(getString(e.getKey()));
-                       target.add(feedback);
-               }
-               if (signIn) {
-                       setResponsePage(Application.get().getHomePage());
-                       if (rememberMe) {
-                               strategy.save(login, password, type, 
domain.getId());
-                       } else {
-                               strategy.remove();
-                       }
-               } else {
-                       if (!hasErrorMessage()) {
-                               error(getString("error.bad.credentials"));
-                               target.add(feedback);
-                       }
-                       // add random timeout
-                       try {
-                               Thread.sleep(6 + (long)(10 * Math.random() * 
1000));
-                       } catch (InterruptedException e) {
-                               log.error("Unexpected exception while 
sleeping", e);
-                       }
-                       strategy.remove();
-                       shake(target);
-               }
-       }
-
        class SignInForm extends StatelessForm<String> {
                private static final long serialVersionUID = 1L;
+               private final WebMarkupContainer credentials = new 
WebMarkupContainer("credentials");
 
                public SignInForm(String id) {
                        super(id);
+               }
 
+               @Override
+               protected void onInitialize() {
+                       loginField.setLabel(new ResourceModel("114"));
+                       passField.setLabel(new ResourceModel("110"));
+                       super.onInitialize();
                        if (WebSession.get().isSignedIn()) {
                                alreadyLoggedIn();
                        }
-                       add(feedback.setOutputMarkupId(true));
-                       add(loginField, passField.setResetPassword(true));
+                       add(credentials, feedback.setOutputMarkupId(true));
+                       credentials.add(loginField, 
passField.setResetPassword(true));
                        List<LdapConfig> ldaps = ldapDao.get();
+                       final boolean showLdap = ldaps.size() > 1;
                        int selectedLdap = 
cfgDao.getInt(CONFIG_DEFAULT_LDAP_ID, 0);
                        domain = ldaps.get(selectedLdap < ldaps.size() && 
selectedLdap > 0 ? selectedLdap : 0);
-                       add(new WebMarkupContainer("ldap")
+                       credentials.add(new WebMarkupContainer("ldap")
                                .add(new DropDownChoice<>("domain", new 
PropertyModel<LdapConfig>(SignInDialog.this, "domain")
-                                               , ldaps, new 
ChoiceRenderer<LdapConfig>("name", "id"))).setVisible(ldaps.size() > 1));
-                       add(new CheckBox("rememberMe", new 
PropertyModel<Boolean>(SignInDialog.this, 
"rememberMe")).setOutputMarkupId(true));
+                                               , ldaps, new 
ChoiceRenderer<LdapConfig>("name", "id"))).setVisible(showLdap));
+                       credentials.add(new CheckBox("rememberMe", new 
PropertyModel<Boolean>(SignInDialog.this, 
"rememberMe")).setOutputMarkupId(true));
                        AjaxButton ab = new AjaxButton("submit") { //FAKE 
button so "submit-on-enter" works as expected
                                private static final long serialVersionUID = 1L;
 
                                @Override
                                protected void onSubmit(AjaxRequestTarget 
target) {
-                                       SignInDialog.this.onSubmit(target, 
loginBtn);
+                                       SignInForm.this.onSubmit(target);
                                }
 
                                @Override
                                protected void onError(AjaxRequestTarget 
target) {
-                                       SignInDialog.this.onError(target, 
loginBtn);
+                                       SignInForm.this.onError(target);
                                }
                        };
                        add(ab);
@@ -267,13 +181,14 @@ public class SignInDialog extends 
NonClosableDialog<String> {
 
                                @Override
                                public void onClick(AjaxRequestTarget target) {
-                                       SignInDialog.this.close(target, null);
-                                       f.open(target);
+                                       SignInDialog.this.close(target);
+                                       f.show(target);
                                }
                        });
                        add(new 
WebMarkupContainer("netTest").add(AttributeModifier.append("href"
                                        , 
RequestCycle.get().urlFor(HashPage.class, new PageParameters().add(APP, 
APP_TYPE_NETWORK)).toString())));
-                       add(new WebMarkupContainer("oauthContainer").add(
+                       final boolean showOauth = 
((SignInPage)getPage()).allowOAuthLogin();
+                       add(new WebMarkupContainer("oauth").add(
                                new ListView<>("oauthList", 
oauthDao.getActive()) {
                                        private static final long 
serialVersionUID = 1L;
 
@@ -295,14 +210,11 @@ public class SignInDialog extends 
NonClosableDialog<String> {
                                                btn.add(lbl);
                                                
item.add(btn.setDefaultFormProcessing(false)); //skip all rules, go to redirect
                                        }
-                               }).setVisible(page.allowOAuthLogin()));
-               }
-
-               @Override
-               protected void onInitialize() {
-                       loginField.setLabel(new ResourceModel("114"));
-                       passField.setLabel(new ResourceModel("110"));
-                       super.onInitialize();
+                               }).setVisible(showOauth));
+                       credentials.add(AttributeModifier.append("class", 
showOauth ? "col-8" : "col-12"));
+                       if (showOauth) {
+                               add(AttributeModifier.append("class", "wide"));
+                       }
                }
 
                private void alreadyLoggedIn() {
@@ -311,5 +223,56 @@ public class SignInDialog extends 
NonClosableDialog<String> {
                        // Ups, no original destination. Go to the home page
                        throw new 
RestartResponseException(Application.get().getHomePage());
                }
+
+               @Override
+               protected void onError() {
+                       
RequestCycle.get().find(AjaxRequestTarget.class).ifPresent(this::onError);
+               }
+
+               protected void onError(AjaxRequestTarget target) {
+                       shake(target);
+               }
+
+               @Override
+               protected void onSubmit() {
+                       
RequestCycle.get().find(AjaxRequestTarget.class).ifPresent(this::onSubmit);
+               }
+
+               protected void onSubmit(AjaxRequestTarget target) {
+                       final String login = 
String.format(domain.getAddDomainToUserName() ? "%s@%s" : "%s"
+                                       , loginField.getModelObject(), 
domain.getDomain());
+                       final String password = passField.getModelObject();
+                       OmAuthenticationStrategy strategy = 
getAuthenticationStrategy();
+                       WebSession ws = WebSession.get();
+                       Type type = domain.getId() > 0 ? Type.ldap : Type.user;
+                       boolean signIn = false;
+                       try {
+                               signIn = ws.signIn(login, password, type, 
domain.getId());
+                       } catch (OmException e) {
+                               error(getString(e.getKey()));
+                               target.add(feedback);
+                       }
+                       if (signIn) {
+                               
setResponsePage(Application.get().getHomePage());
+                               if (rememberMe) {
+                                       strategy.save(login, password, type, 
domain.getId());
+                               } else {
+                                       strategy.remove();
+                               }
+                       } else {
+                               if (!hasErrorMessage()) {
+                                       
error(getString("error.bad.credentials"));
+                                       target.add(feedback);
+                               }
+                               // add random timeout
+                               try {
+                                       Thread.sleep(6 + (long)(10 * 
Math.random() * 1000));
+                               } catch (InterruptedException e) {
+                                       log.error("Unexpected exception while 
sleeping", e);
+                               }
+                               strategy.remove();
+                               shake(target);
+                       }
+               }
        }
 }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.html
index 55174ff..7e11518 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.html
@@ -23,7 +23,9 @@
 <wicket:extend>
        <div wicket:id="signin"></div>
        <div wicket:id="register"></div>
+       <div wicket:id="registerInfo"></div>
        <div wicket:id="forget"></div>
+       <div wicket:id="forgetInfo"></div>
        <div wicket:id="kick"></div>
 </wicket:extend>
 </html>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
index 0d7c8e2..0bfb0c2 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
@@ -58,6 +58,8 @@ import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.pages.BaseInitedPage;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.request.IRequestParameters;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.flow.RedirectToUrlException;
@@ -70,11 +72,46 @@ import org.slf4j.LoggerFactory;
 import com.github.openjson.JSONException;
 import com.github.openjson.JSONObject;
 
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal.Backdrop;
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.dialog.TextContentModal;
+
 public class SignInPage extends BaseInitedPage {
        private static final long serialVersionUID = 1L;
        private static final Logger log = 
LoggerFactory.getLogger(SignInPage.class);
-       private SignInDialog d;
-       private KickMessageDialog m;
+       private SignInDialog signin;
+       private KickMessageDialog kick;
+       private final Modal<String> forgetInfoDialog = new 
TextContentModal("forgetInfo", new ResourceModel("321")) {
+               private static final long serialVersionUID = 1L;
+
+               @Override
+               protected void onClose(IPartialPageRequestHandler handler) {
+                       signin.show(handler);
+               }
+       };
+       private final ForgetPasswordDialog forget = new 
ForgetPasswordDialog("forget", forgetInfoDialog);
+       private final Modal<String> registerInfoDialog = new 
TextContentModal("registerInfo", new ResourceModel("warn.notverified")) {
+               private static final long serialVersionUID = 1L;
+
+               @Override
+               protected void onInitialize() {
+                       super.onInitialize();
+                       get("content").setOutputMarkupId(true);
+               }
+
+               @Override
+               public Modal<String> setModelObject(String obj) {
+                       super.setModelObject(obj);
+                       get("content").setDefaultModelObject(obj);
+                       return this;
+               }
+
+               @Override
+               protected void onClose(IPartialPageRequestHandler handler) {
+                       signin.show(handler);
+               }
+       };
+       RegisterDialog r = new RegisterDialog("register", registerInfoDialog);
        @SpringBean
        private ConfigurationDao cfgDao;
        @SpringBean
@@ -136,16 +173,26 @@ public class SignInPage extends BaseInitedPage {
        protected void onInitialize() {
                super.onInitialize();
 
-               RegisterDialog r = new RegisterDialog("register");
-               ForgetPasswordDialog f = new ForgetPasswordDialog("forget");
-               d = new SignInDialog("signin", this);
-               d.setRegisterDialog(r);
-               d.setForgetPasswordDialog(f);
-               r.setSignInDialog(d);
-               f.setSignInDialog(d);
-               m = new KickMessageDialog("kick");
-               add(d.setVisible(!WebSession.get().isKickedByAdmin()),
-                               r.setVisible(allowRegister()), f, 
m.setVisible(WebSession.get().isKickedByAdmin()));
+               signin = new SignInDialog("signin");
+               signin.setRegisterDialog(r);
+               signin.setForgetPasswordDialog(forget);
+               r.setSignInDialog(signin);
+               forget.setSignInDialog(signin);
+               kick = new KickMessageDialog("kick");
+               add(signin.setVisible(!WebSession.get().isKickedByAdmin()),
+                               r.setVisible(allowRegister()), forget, 
kick.setVisible(WebSession.get().isKickedByAdmin()));
+               add(forgetInfoDialog
+                               .header(new ResourceModel("312"))
+                               .addCloseButton(new ResourceModel("54"))
+                               .setUseCloseHandler(true)
+                               .setBackdrop(Backdrop.STATIC)
+               );
+               add(registerInfoDialog
+                               .header(new ResourceModel("235"))
+                               .addCloseButton(new ResourceModel("54"))
+                               .setUseCloseHandler(true)
+                               .setBackdrop(Backdrop.STATIC)
+               );
        }
 
        boolean allowRegister() {
diff --git a/openmeetings-web/src/main/webapp/css/raw-general.css 
b/openmeetings-web/src/main/webapp/css/raw-general.css
index 1c1fcbb..b054b4e 100644
--- a/openmeetings-web/src/main/webapp/css/raw-general.css
+++ b/openmeetings-web/src/main/webapp/css/raw-general.css
@@ -21,12 +21,6 @@ html, body {
        box-sizing: content-box; /* IE */
        box-sizing: initial; /*reset bootstrap box sizing*/
 }
-.signin input:not([type='checkbox']):not([type='radio']), .signin select {
-       width: 170px;
-}
-.signin td.desc {
-       width: 200px;
-}
 .signin .oauth-section {
        border-left: 2px dotted;
        padding-left: 5px;
@@ -40,6 +34,9 @@ html, body {
 .signin .remember {
        white-space: nowrap;
 }
+.signin-forget .form-check-label {
+       padding-right: 10px;
+}
 #header {
        font-size: 28px;
        line-height: 40px;

Reply via email to