From 1b5baaed3c572b0b28e95c048f5f8bde7881faff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Barto=C5=A1?= Date: Tue, 11 Aug 2026 14:11:54 +0200 Subject: [PATCH] [Login] Unify top-bottom padding, login-welcome themes, register button, subtitles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Unify padding and spacing across login and welcome themes - Unify registration button with login button macros - Show client identity on the login page Closes #51619 Closes #51618 Closes #51617 Signed-off-by: Martin Bartoš --- .../testframework/ui/page/RegisterPage.java | 5 +-- .../testsuite/pages/RegisterPage.java | 2 +- .../login/messages/messages_en.properties | 1 + .../theme/keycloak.v2/login/buttons.ftl | 20 ++++++++-- .../theme/keycloak.v2/login/login.ftl | 4 ++ .../theme/keycloak.v2/login/register.ftl | 17 ++++---- .../login/resources/css/styles.css | 13 ++++++ .../theme/keycloak.v2/login/template.ftl | 40 +++++-------------- .../theme/keycloak.v2/login/theme.properties | 7 ++-- .../theme/keycloak/welcome/index.ftl | 6 +-- .../welcome/resources/css/welcome.css | 22 ++++++++++ .../theme/keycloak/welcome/theme.properties | 4 ++ 12 files changed, 90 insertions(+), 51 deletions(-) diff --git a/test-framework/ui/src/main/java/org/keycloak/testframework/ui/page/RegisterPage.java b/test-framework/ui/src/main/java/org/keycloak/testframework/ui/page/RegisterPage.java index ea45f5170b8a..3ec3f7d8a5fa 100644 --- a/test-framework/ui/src/main/java/org/keycloak/testframework/ui/page/RegisterPage.java +++ b/test-framework/ui/src/main/java/org/keycloak/testframework/ui/page/RegisterPage.java @@ -25,7 +25,6 @@ import org.junit.jupiter.api.Assertions; import org.openqa.selenium.By; -import org.openqa.selenium.Keys; import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; @@ -59,7 +58,7 @@ public class RegisterPage extends AbstractLoginPage { @FindBy(name = "termsAccepted") private WebElement termsAcceptedInput; - @FindBy(css = "input[type=\"submit\"]") + @FindBy(css = "[type=\"submit\"]") private WebElement submitButton; @FindBy(linkText = "« Back to Login") @@ -139,7 +138,7 @@ public void register(String firstName, String lastName, String email, String use } } - submitButton.sendKeys(Keys.ENTER); + submitButton.click(); } public String getFirstName() { diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/RegisterPage.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/RegisterPage.java index 6e2bd078cd3e..f8ff2d205c72 100644 --- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/RegisterPage.java +++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/RegisterPage.java @@ -68,7 +68,7 @@ public class RegisterPage extends LanguageComboboxAwarePage @FindBy(name = "termsAccepted") private WebElement termsAcceptedInput; - @FindBy(css = "input[type=\"submit\"]") + @FindBy(css = "[type=\"submit\"]") private WebElement submitButton; @FindBy(css = "div[class^='pf-v5-c-alert'], div[class^='alert-error']") diff --git a/themes/src/main/resources/theme/base/login/messages/messages_en.properties b/themes/src/main/resources/theme/base/login/messages/messages_en.properties index 2a88cfe3551d..2ada5007d8b2 100644 --- a/themes/src/main/resources/theme/base/login/messages/messages_en.properties +++ b/themes/src/main/resources/theme/base/login/messages/messages_en.properties @@ -25,6 +25,7 @@ bypassKerberosDetail=Either you are not logged in by Kerberos or your browser is kerberosNotSetUp=Kerberos is not set up. You cannot login. registerTitle=Register loginAccountTitle=Sign in to your account +loginSubtitle=to continue to {0} loginTitle=Sign in to {0} loginTitleHtml={0} impersonateTitle={0} Impersonate User diff --git a/themes/src/main/resources/theme/keycloak.v2/login/buttons.ftl b/themes/src/main/resources/theme/keycloak.v2/login/buttons.ftl index 2106364d2a4a..53c1fd9d302b 100644 --- a/themes/src/main/resources/theme/keycloak.v2/login/buttons.ftl +++ b/themes/src/main/resources/theme/keycloak.v2/login/buttons.ftl @@ -1,3 +1,6 @@ +<#-- + @param horizontal - if true, buttons are placed on the same row sharing the full width +--> <#macro actionGroup horizontal=false>
@@ -6,9 +9,20 @@
-<#macro button label id="" name="" type="primary" fullWidth=true class=[] extra...> - diff --git a/themes/src/main/resources/theme/keycloak.v2/login/login.ftl b/themes/src/main/resources/theme/keycloak.v2/login/login.ftl index 2a8d729b1c2b..42550887cf57 100755 --- a/themes/src/main/resources/theme/keycloak.v2/login/login.ftl +++ b/themes/src/main/resources/theme/keycloak.v2/login/login.ftl @@ -8,6 +8,10 @@ <#if section = "header"> ${msg("loginAccountTitle")} + <#elseif section = "subheader"> + <#if client?? && client.name?has_content> + ${kcSanitize(msg("loginSubtitle", advancedMsg(client.name)))?no_esc} + <#elseif section = "form">
diff --git a/themes/src/main/resources/theme/keycloak.v2/login/register.ftl b/themes/src/main/resources/theme/keycloak.v2/login/register.ftl index 894d738117d6..4ae9d3c6d34d 100755 --- a/themes/src/main/resources/theme/keycloak.v2/login/register.ftl +++ b/themes/src/main/resources/theme/keycloak.v2/login/register.ftl @@ -1,5 +1,6 @@ <#import "template.ftl" as layout> <#import "field.ftl" as field> +<#import "buttons.ftl" as buttons> <#import "user-profile-commons.ftl" as userProfileCommons> <#import "register-commons.ftl" as registerCommons> <#import "password-validation.ftl" as validator> @@ -40,16 +41,14 @@ document.getElementById("kc-register-form").requestSubmit(); } -
- -
+ <@buttons.actionGroup> + <@buttons.button id="kc-submit" label="doRegister" extraClass=["g-recaptcha"] + specialAttributes={"data-sitekey": recaptchaSiteKey, "data-callback": "onSubmitRecaptcha", "data-action": recaptchaAction} /> + <#else> -
- -
+ <@buttons.actionGroup> + <@buttons.button id="kc-register" label="doRegister" /> +