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

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

commit 15d6e294762fa282d9245815f6feb6ebf9dc159e
Author: Maxim Solodovnik <solomax...@gmail.com>
AuthorDate: Tue May 16 09:09:03 2023 +0700

    [OPENMEETINGS-2774] initial commit to fix styles in the emails
---
 .../mail/template/AbstractTemplatePage.html        | 109 +++++++++++++++++++++
 ...emplatePanel.java => AbstractTemplatePage.java} |  31 ++++--
 .../mail/template/AbstractTemplatePanel.html       |  27 -----
 .../service/mail/template/FeedbackTemplate.java    |   5 +-
 .../service/mail/template/InvitationTemplate.java  |   5 +-
 .../mail/template/RegisterUserTemplate.java        |   5 +-
 .../template/RequestContactConfirmTemplate.java    |   5 +-
 .../mail/template/RequestContactTemplate.java      |   5 +-
 .../mail/template/ResetPasswordTemplate.java       |   5 +-
 .../template/subject/SubjectEmailTemplate.java     |   6 +-
 .../apache/openmeetings/web/app/Application.java   |   2 +-
 .../apache/openmeetings/web/pages/BasePage.html    |  54 +++++-----
 .../apache/openmeetings/web/pages/BasePage.java    |   3 +
 13 files changed, 180 insertions(+), 82 deletions(-)

diff --git 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePage.html
 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePage.html
new file mode 100644
index 000000000..6cac8cf76
--- /dev/null
+++ 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePage.html
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<!DOCTYPE html>
+<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-9.xsd";>
+       <head>
+               <meta name="viewport" content="width=device-width, 
initial-scale=1.0">
+               <meta http-equiv="Content-Type" content="text/html; 
charset=UTF-8">
+               <style>
+                       .main {
+                               background-color: #f5f5f5;
+                               font-family: 'Segoe UI', sans-serif;
+                               -webkit-font-smoothing: antialiased;
+                               font-size: 14px;
+                               line-height: 1.4;
+                               margin: 0;
+                               padding: 0;
+                               -ms-text-size-adjust: 100%;
+                               -webkit-text-size-adjust: 100%;
+                               font-size: 14px;
+                       }
+                       h2 {
+                               font-size: 25px;
+                               font-weight: normal;
+                               margin: 0;
+                               margin-bottom: 15px;
+                       }
+                       p, span {
+                               margin-bottom: 1em;
+                       }
+                       a {
+                               color: #007bff;
+                               text-decoration: none;
+                       }
+                       .container {
+                               max-width: 580px;
+                               margin: 0 auto;
+                               padding: 20px;
+                               width: 100%;
+                       }
+                       .wrapper {
+                               max-width: 540px;
+                               margin: 0 auto;
+                               padding: 15px;
+                               width: 100%;
+                               border-radius: 5px;
+                               background-color: #fff;
+                       }
+                       .action a {
+                               box-sizing: border-box;
+                               cursor: pointer;
+                               display: inline-block;
+                               font-weight: bold;
+                               margin: 0;
+                               border-radius: 5px;
+                               padding: 12px 25px;
+                               background-color: #3498db;
+                               border-color: #3498db;
+                               color: #ffffff;
+                       }
+                       @media only screen and (max-width: 620px) {
+                               .container {
+                                       padding: 0;
+                                       width: 100%;
+                                       text-align: center;
+                               }
+                               .wrapper {
+                                       max-width: 560px;
+                                       margin: 0 auto;
+                                       padding: 10px;
+                                       border-left-width: 0;
+                                       border-radius: 0;
+                                       border-right-width: 0;
+                               }
+                               .wrapper .action {
+                                       text-align: center;
+                                       margin-top: 25px;
+                               }
+
+                               .wrapper .action a {
+                                       display: block;
+                                       margin: 0;
+                                       padding: 12px 25px;
+                               }
+                       }
+               </style>
+       </head>
+       <body>
+               <div wicket:id="container">
+                       <wicket:child/>
+               </div>
+       </body>
+</html>
diff --git 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.java
 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePage.java
similarity index 58%
rename from 
openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.java
rename to 
openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePage.java
index 4d352cdff..50d75ef17 100644
--- 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.java
+++ 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePage.java
@@ -22,25 +22,40 @@ import java.util.Locale;
 
 import org.apache.openmeetings.IApplication;
 import org.apache.openmeetings.IWebSession;
+import org.apache.wicket.Application;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Session;
+import org.apache.wicket.core.util.string.ComponentRenderer;
 import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
-import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.protocol.http.WebSession;
+import org.apache.wicket.protocol.http.mock.MockHttpServletRequest;
+import org.apache.wicket.protocol.http.mock.MockHttpSession;
+import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
+import org.apache.wicket.request.Request;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
-public abstract class AbstractTemplatePanel extends Panel {
+public abstract class AbstractTemplatePage extends WebPage {
        private static final long serialVersionUID = 1L;
-       public static final String COMP_ID = "template";
+       public static final String COMP_ID = "container";
        protected final Locale locale;
+       protected final ComponentRenderer renderer;
 
        @SpringBean
        protected IApplication app;
 
-       protected AbstractTemplatePanel(Locale locale) {
-               super(COMP_ID);
+       protected AbstractTemplatePage(Locale locale) {
                this.locale = locale;
-               add(new 
TransparentWebMarkupContainer("container").add(AttributeModifier.append("dir", 
Session.isRtlLanguage(this.locale) ? "rtl" : "ltr")));
+               add(new 
TransparentWebMarkupContainer(COMP_ID).add(AttributeModifier.append("dir", 
Session.isRtlLanguage(this.locale) ? "rtl" : "ltr")));
+               final Application a = Application.get();
+               renderer = new ComponentRenderer(a) {
+                       @Override
+                       protected Request newRequest() {
+                               return new ServletWebRequest(
+                                               new MockHttpServletRequest(a, 
new MockHttpSession(app.getServletContext()), app.getServletContext())
+                                               , "");
+                       }
+               };
        }
 
        public static IWebSession getOmSession() {
@@ -50,4 +65,8 @@ public abstract class AbstractTemplatePanel extends Panel {
        public String getString(String id, Locale locale, String... params) {
                return app.getOmString(id, locale, params);
        }
+
+       protected String renderEmail() {
+               return renderer.renderPage(() -> this).toString();
+       }
 }
diff --git 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.html
 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.html
deleted file mode 100644
index 3d7d28310..000000000
--- 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  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.
--->
-<!DOCTYPE html>
-<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-9.xsd";>
-<wicket:panel>
-       <div wicket:id="container">
-               <wicket:child/>
-       </div>
-</wicket:panel>
-</html>
diff --git 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/FeedbackTemplate.java
 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/FeedbackTemplate.java
index a16970db9..ca5eca9e9 100644
--- 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/FeedbackTemplate.java
+++ 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/FeedbackTemplate.java
@@ -20,11 +20,10 @@ package org.apache.openmeetings.service.mail.template;
 
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getApplicationName;
 
-import org.apache.wicket.core.util.string.ComponentRenderer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.ExternalLink;
 
-public class FeedbackTemplate extends AbstractTemplatePanel {
+public class FeedbackTemplate extends AbstractTemplatePage {
        private static final long serialVersionUID = 1L;
 
        private FeedbackTemplate(String username, String email, String message) 
{
@@ -37,6 +36,6 @@ public class FeedbackTemplate extends AbstractTemplatePanel {
        }
 
        public static String getEmail(String username, String email, String 
message) {
-               return ComponentRenderer.renderComponent(new 
FeedbackTemplate(username, email, message)).toString();
+               return new FeedbackTemplate(username, email, 
message).renderEmail();
        }
 }
diff --git 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/InvitationTemplate.java
 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/InvitationTemplate.java
index d65e4e336..b0c584184 100644
--- 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/InvitationTemplate.java
+++ 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/InvitationTemplate.java
@@ -24,12 +24,11 @@ import java.util.Locale;
 
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.util.LocaleHelper;
-import org.apache.wicket.core.util.string.ComponentRenderer;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.ExternalLink;
 
-public class InvitationTemplate extends AbstractTemplatePanel {
+public class InvitationTemplate extends AbstractTemplatePage {
        private static final long serialVersionUID = 1L;
 
        private InvitationTemplate(Locale locale, String invitorName, String 
message, String link, boolean room) {
@@ -54,6 +53,6 @@ public class InvitationTemplate extends AbstractTemplatePanel 
{
 
        public static String getEmail(User invitee, String invitorName, String 
message, String link, boolean room) {
                ensureApplication(invitee.getLanguageId());
-               return ComponentRenderer.renderComponent(new 
InvitationTemplate(LocaleHelper.getLocale(invitee), invitorName, message, link, 
room)).toString();
+               return new InvitationTemplate(LocaleHelper.getLocale(invitee), 
invitorName, message, link, room).renderEmail();
        }
 }
diff --git 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RegisterUserTemplate.java
 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RegisterUserTemplate.java
index aaf500210..ef99df49a 100644
--- 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RegisterUserTemplate.java
+++ 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RegisterUserTemplate.java
@@ -21,12 +21,11 @@ package org.apache.openmeetings.service.mail.template;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getApplicationName;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.getBaseUrl;
 
-import org.apache.wicket.core.util.string.ComponentRenderer;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.ExternalLink;
 
-public class RegisterUserTemplate extends AbstractTemplatePanel {
+public class RegisterUserTemplate extends AbstractTemplatePage {
        private static final long serialVersionUID = 1L;
 
        private RegisterUserTemplate(String username, String email, String 
verificationUrl) {
@@ -43,6 +42,6 @@ public class RegisterUserTemplate extends 
AbstractTemplatePanel {
        }
 
        public static String getEmail(String username, String email, String 
verificationUrl) {
-               return ComponentRenderer.renderComponent(new 
RegisterUserTemplate(username, email, verificationUrl)).toString();
+               return new RegisterUserTemplate(username, email, 
verificationUrl).renderEmail();
        }
 }
diff --git 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactConfirmTemplate.java
 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactConfirmTemplate.java
index d81b5eaf9..dafe952b0 100644
--- 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactConfirmTemplate.java
+++ 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactConfirmTemplate.java
@@ -20,10 +20,9 @@ package org.apache.openmeetings.service.mail.template;
 
 import org.apache.openmeetings.db.entity.user.UserContact;
 import org.apache.openmeetings.db.util.LocaleHelper;
-import org.apache.wicket.core.util.string.ComponentRenderer;
 import org.apache.wicket.markup.html.basic.Label;
 
-public class RequestContactConfirmTemplate extends AbstractTemplatePanel {
+public class RequestContactConfirmTemplate extends AbstractTemplatePage {
        private static final long serialVersionUID = 1L;
 
        private RequestContactConfirmTemplate(UserContact contact) {
@@ -35,6 +34,6 @@ public class RequestContactConfirmTemplate extends 
AbstractTemplatePanel {
        }
 
        public static String getEmail(UserContact contact) {
-               return ComponentRenderer.renderComponent(new 
RequestContactConfirmTemplate(contact)).toString();
+               return new RequestContactConfirmTemplate(contact).renderEmail();
        }
 }
diff --git 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactTemplate.java
 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactTemplate.java
index 207e0139f..0098c3892 100644
--- 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactTemplate.java
+++ 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactTemplate.java
@@ -20,11 +20,10 @@ package org.apache.openmeetings.service.mail.template;
 
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.util.LocaleHelper;
-import org.apache.wicket.core.util.string.ComponentRenderer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.ExternalLink;
 
-public class RequestContactTemplate extends AbstractTemplatePanel {
+public class RequestContactTemplate extends AbstractTemplatePage {
        private static final long serialVersionUID = 1L;
 
        private RequestContactTemplate(User userToAdd, User user) {
@@ -38,6 +37,6 @@ public class RequestContactTemplate extends 
AbstractTemplatePanel {
        }
 
        public static String getEmail(User userToAdd, User user) {
-               return ComponentRenderer.renderComponent(new 
RequestContactTemplate(userToAdd, user)).toString();
+               return new RequestContactTemplate(userToAdd, 
user).renderEmail();
        }
 }
diff --git 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/ResetPasswordTemplate.java
 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/ResetPasswordTemplate.java
index 42b8c38c3..508617401 100644
--- 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/ResetPasswordTemplate.java
+++ 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/ResetPasswordTemplate.java
@@ -18,11 +18,10 @@
  */
 package org.apache.openmeetings.service.mail.template;
 
-import org.apache.wicket.core.util.string.ComponentRenderer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.ExternalLink;
 
-public class ResetPasswordTemplate extends AbstractTemplatePanel {
+public class ResetPasswordTemplate extends AbstractTemplatePage {
        private static final long serialVersionUID = 1L;
 
        private ResetPasswordTemplate(String link) {
@@ -33,6 +32,6 @@ public class ResetPasswordTemplate extends 
AbstractTemplatePanel {
        }
 
        public static String getEmail(String link) {
-               return ComponentRenderer.renderComponent(new 
ResetPasswordTemplate(link)).toString();
+               return new ResetPasswordTemplate(link).renderEmail();
        }
 }
diff --git 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/SubjectEmailTemplate.java
 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/SubjectEmailTemplate.java
index be298c55b..ab24ee40e 100644
--- 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/SubjectEmailTemplate.java
+++ 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/SubjectEmailTemplate.java
@@ -20,11 +20,11 @@ package 
org.apache.openmeetings.service.mail.template.subject;
 
 import java.util.Locale;
 
-import org.apache.openmeetings.service.mail.template.AbstractTemplatePanel;
+import org.apache.openmeetings.service.mail.template.AbstractTemplatePage;
 import org.apache.wicket.core.util.string.ComponentRenderer;
 import org.apache.wicket.markup.html.panel.Fragment;
 
-public abstract class SubjectEmailTemplate extends AbstractTemplatePanel {
+public abstract class SubjectEmailTemplate extends AbstractTemplatePage {
        private static final long serialVersionUID = 1L;
        private String email = null;
        private String subject = null;
@@ -35,7 +35,7 @@ public abstract class SubjectEmailTemplate extends 
AbstractTemplatePanel {
        }
 
        SubjectEmailTemplate create() {
-               email = ComponentRenderer.renderComponent(this).toString();
+               email = renderEmail();
                subject = 
ComponentRenderer.renderComponent(getSubjectFragment()).toString();
                created = true;
                return this;
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 a7905396b..de6884a63 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
@@ -303,7 +303,7 @@ public class Application extends 
AuthenticatedWebApplication implements IApplica
                }
                getHeaderResponseDecorators().add(FilteringHeaderResponse::new);
                super.init();
-               final IBootstrapSettings settings = new BootstrapSettings();
+               final IBootstrapSettings settings = new 
BootstrapSettings().setAutoAppendResources(false);
                
Bootstrap.builder().withBootstrapSettings(settings).install(this);
                WysiwygLibrarySettings.get().setBootstrapCssReference(null);
                
WysiwygLibrarySettings.get().setBootstrapDropDownJavaScriptReference(null);
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.html
index 222059244..17b42b1a4 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.html
@@ -24,33 +24,33 @@
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
        <meta name="viewport" content="height=device-height, initial-scale=1, 
width=device-width, initial-scale=1" />
        <link rel="apple-touch-icon" href="images/icons/apple-icon-180.png">
-    <meta name="apple-mobile-web-app-capable" content="yes">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2048-2732.jpg" media="(device-width: 1024px) 
and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and 
(orientation: portrait)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2732-2048.jpg" media="(device-width: 1024px) 
and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and 
(orientation: landscape)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1668-2388.jpg" media="(device-width: 834px) and 
(device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
portrait)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2388-1668.jpg" media="(device-width: 834px) and 
(device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
landscape)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1536-2048.jpg" media="(device-width: 768px) and 
(device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
portrait)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2048-1536.jpg" media="(device-width: 768px) and 
(device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
landscape)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1668-2224.jpg" media="(device-width: 834px) and 
(device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
portrait)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2224-1668.jpg" media="(device-width: 834px) and 
(device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
landscape)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1620-2160.jpg" media="(device-width: 810px) and 
(device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
portrait)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2160-1620.jpg" media="(device-width: 810px) and 
(device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
landscape)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1284-2778.jpg" media="(device-width: 428px) and 
(device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
portrait)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2778-1284.jpg" media="(device-width: 428px) and 
(device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
landscape)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1170-2532.jpg" media="(device-width: 390px) and 
(device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
portrait)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2532-1170.jpg" media="(device-width: 390px) and 
(device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
landscape)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1125-2436.jpg" media="(device-width: 375px) and 
(device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
portrait)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2436-1125.jpg" media="(device-width: 375px) and 
(device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
landscape)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1242-2688.jpg" media="(device-width: 414px) and 
(device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
portrait)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2688-1242.jpg" media="(device-width: 414px) and 
(device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
landscape)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-828-1792.jpg" media="(device-width: 414px) and 
(device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
portrait)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1792-828.jpg" media="(device-width: 414px) and 
(device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
landscape)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1242-2208.jpg" media="(device-width: 414px) and 
(device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
portrait)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2208-1242.jpg" media="(device-width: 414px) and 
(device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
landscape)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-750-1334.jpg" media="(device-width: 375px) and 
(device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
portrait)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1334-750.jpg" media="(device-width: 375px) and 
(device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
landscape)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-640-1136.jpg" media="(device-width: 320px) and 
(device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
portrait)">
-    <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1136-640.jpg" media="(device-width: 320px) and 
(device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
landscape)">
+       <meta name="apple-mobile-web-app-capable" content="yes">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2048-2732.jpg" media="(device-width: 1024px) 
and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and 
(orientation: portrait)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2732-2048.jpg" media="(device-width: 1024px) 
and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and 
(orientation: landscape)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1668-2388.jpg" media="(device-width: 834px) and 
(device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
portrait)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2388-1668.jpg" media="(device-width: 834px) and 
(device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
landscape)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1536-2048.jpg" media="(device-width: 768px) and 
(device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
portrait)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2048-1536.jpg" media="(device-width: 768px) and 
(device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
landscape)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1668-2224.jpg" media="(device-width: 834px) and 
(device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
portrait)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2224-1668.jpg" media="(device-width: 834px) and 
(device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
landscape)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1620-2160.jpg" media="(device-width: 810px) and 
(device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
portrait)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2160-1620.jpg" media="(device-width: 810px) and 
(device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
landscape)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1284-2778.jpg" media="(device-width: 428px) and 
(device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
portrait)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2778-1284.jpg" media="(device-width: 428px) and 
(device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
landscape)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1170-2532.jpg" media="(device-width: 390px) and 
(device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
portrait)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2532-1170.jpg" media="(device-width: 390px) and 
(device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
landscape)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1125-2436.jpg" media="(device-width: 375px) and 
(device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
portrait)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2436-1125.jpg" media="(device-width: 375px) and 
(device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
landscape)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1242-2688.jpg" media="(device-width: 414px) and 
(device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
portrait)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2688-1242.jpg" media="(device-width: 414px) and 
(device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
landscape)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-828-1792.jpg" media="(device-width: 414px) and 
(device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
portrait)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1792-828.jpg" media="(device-width: 414px) and 
(device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
landscape)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1242-2208.jpg" media="(device-width: 414px) and 
(device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
portrait)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-2208-1242.jpg" media="(device-width: 414px) and 
(device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: 
landscape)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-750-1334.jpg" media="(device-width: 375px) and 
(device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
portrait)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1334-750.jpg" media="(device-width: 375px) and 
(device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
landscape)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-640-1136.jpg" media="(device-width: 320px) and 
(device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
portrait)">
+       <link rel="apple-touch-startup-image" 
href="images/icons/apple-splash-1136-640.jpg" media="(device-width: 320px) and 
(device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: 
landscape)">
        <link rel="manifest" href="services/info/manifest.webmanifest">
        <link rel="shortcut icon" href="public/favicon.png" type="image/png"/>
        <wicket:header-items/>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.java
index b60cf46c7..7ca824dea 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.java
@@ -53,6 +53,8 @@ import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.string.Strings;
 import org.wicketstuff.urlfragment.AsyncUrlFragmentAwarePage;
 
+import de.agilecoders.wicket.core.Bootstrap;
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.behavior.BootstrapResourcesBehavior;
 import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesome6CssReference;
 
 public abstract class BasePage extends AsyncUrlFragmentAwarePage {
@@ -145,6 +147,7 @@ public abstract class BasePage extends 
AsyncUrlFragmentAwarePage {
                        response.render(OnDomReadyHeaderItem.forScript(script));
                }
                
response.render(CssHeaderItem.forReference(FontAwesome6CssReference.instance()));
+               
BootstrapResourcesBehavior.instance().renderHead(Bootstrap.getSettings(getApplication()),
 response);
                response.render(new 
FilteredHeaderItem(CssHeaderItem.forUrl("css/custom.css"), CUSTOM_CSS_FILTER));
        }
 

Reply via email to