Merge pull request #193 from vrockai/FORMS2

Forms refactoring
This commit is contained in:
Bill Burke 2014-02-05 10:29:14 -05:00
commit 9ac4cdf362
16 changed files with 248 additions and 291 deletions

View file

@ -2,22 +2,15 @@
<#import "template.ftl" as layout> <#import "template.ftl" as layout>
<@layout.registrationLayout bodyClass=""; section> <@layout.registrationLayout bodyClass=""; section>
<#if section = "title"> <#if section = "title">
${rb.errorTitle}
We're sorry...
<#elseif section = "header"> <#elseif section = "header">
${rb.errorTitleHtml}
We're <strong>sorry</strong> ...
<#elseif section = "form"> <#elseif section = "form">
<div id="kc-error-message">
<p class="instruction">Something happened and we could not process your request.</p> <p class="instruction">${rb.errorGenericMsg}</p>
<p id="error-summary" class="instruction second">${message.summary}</p> <p id="error-summary" class="instruction second">${message.summary}</p>
<#elseif section = "info" >
<div id="info">
</div> </div>
</#if> </#if>
</@layout.registrationLayout> </@layout.registrationLayout>

View file

@ -1,38 +1,31 @@
<#import "template.ftl" as layout> <#import "template.ftl" as layout>
<@layout.registrationLayout bodyClass=""; section> <@layout.registrationLayout bodyClass=""; section>
<#if section = "title"> <#if section = "title">
${rb.loginTotpTitle}
Google Authenticator Setup
<#elseif section = "header"> <#elseif section = "header">
${rb.loginTotpTitle}
Google Authenticator Setup
<#elseif section = "form"> <#elseif section = "form">
<ol id="kc-totp-settings">
<div id="form">
<ol>
<li> <li>
<p><strong>1</strong>Download the <a href="http://code.google.com/p/google-authenticator/" target="_blank">Google Authenticator app</a> in your device.</p> <p><strong>1</strong>${rb.loginTotpStep1_1} <a href="http://code.google.com/p/google-authenticator/" target="_blank">${rb.loginTotpStep1_2}</a> ${rb.loginTotpStep1_3}</p>
</li> </li>
<li class="clearfix"> <li class="clearfix">
<p><strong>2</strong>Create an account in Google Authenticator and scan the barcode or the provided key below.</p> <p><strong>2</strong>${rb.loginTotpStep2}</p>
<img src="${totp.totpSecretQrCodeUrl}" alt="Figure: Barcode"> <img src="${totp.totpSecretQrCodeUrl}" alt="Figure: Barcode">
<span class="code">${totp.totpSecretEncoded}</span> <span class="code">${totp.totpSecretEncoded}</span>
</li> </li>
<li class="clearfix"> <li class="clearfix">
<p><strong>3</strong>Enter the one-time-password provided by Google Authenticator below and click Submit to finish the setup.</p> <p><strong>3</strong>${rb.loginTotpStep3}</p>
<form action="${url.loginUpdateTotpUrl}" method="post"> <form action="${url.loginUpdateTotpUrl}" method="post">
<div> <div class="field-wrapper">
<label for="otp" class="two-lines">One-time-password</label><input type="text" id="totp" name="totp" /> <label for="otp" class="two-lines">${rb.loginTotpOneTime}</label><input type="text" id="totp" name="totp" />
<input type="hidden" id="totpSecret" name="totpSecret" value="${totp.totpSecret}" /> <input type="hidden" id="totpSecret" name="totpSecret" value="${totp.totpSecret}" />
</div> </div>
<input type="submit" class="btn-primary" value="Submit" /> <input type="submit" class="btn-primary" value="${rb.submit}" />
</form> </form>
</li> </li>
</ol> </ol>
</div>
<#elseif section = "info" >
</#if> </#if>
</@layout.registrationLayout> </@layout.registrationLayout>

View file

@ -2,17 +2,15 @@
<#import "template.ftl" as layout> <#import "template.ftl" as layout>
<@layout.registrationLayout bodyClass="oauth"; section> <@layout.registrationLayout bodyClass="oauth"; section>
<#if section = "title"> <#if section = "title">
${rb.oauthGrantTitle}
OAuth Grant
<#elseif section = "header"> <#elseif section = "header">
${rb.oauthGrantTitleHtml}
<strong>Keycloak</strong> Central Login
<#elseif section = "form"> <#elseif section = "form">
<div class="content-area"> <div id="kc-oauth" class="content-area">
<p class="instruction"><strong>${oauth.client}</strong> requests access to:</p> <p class="instruction"><strong>${oauth.client}</strong> ${rb.oauthGrantRequest}</p>
<ul> <ul id="kc-oauth-list">
<#list oauth.realmRolesRequested as role> <#list oauth.realmRolesRequested as role>
<li> <li>
<span><#if role.description??>${role.description}<#else>${role.name}</#if></span> <span><#if role.description??>${role.description}<#else>${role.name}</#if></span>
@ -29,18 +27,12 @@
</#list> </#list>
</ul> </ul>
<p class="terms">Keycloak Central Login and Google will use this information in accordance with their respective terms of service and privacy policies.</p> <p class="terms">${rb.oauthGrantTerms}</p>
<form class="form-actions" action="${url.oauthAction}" method="POST"> <form class="form-actions" action="${url.oauthAction}" method="POST">
<input type="hidden" name="code" value="${oauth.code}"> <input type="hidden" name="code" value="${oauth.code}">
<input type="submit" class="btn-primary primary" name="accept" value="Accept"> <input type="submit" class="btn-primary primary" name="accept" value="${rb.accept}">
<input type="submit" class="btn-secondary" name="cancel" value="Cancel"> <input type="submit" class="btn-secondary" name="cancel" value="${rb.cancel}">
</form> </form>
</div> </div>
<#elseif section = "info" >
<div id="info">
</div>
</#if> </#if>
</@layout.registrationLayout> </@layout.registrationLayout>

View file

@ -1,25 +1,23 @@
<#import "template.ftl" as layout> <#import "template.ftl" as layout>
<@layout.registrationLayout bodyClass=""; section> <@layout.registrationLayout bodyClass=""; section>
<#if section = "title"> <#if section = "title">
${rb.emailForgotHeader} ${rb.emailForgotHeader}
<#elseif section = "header"> <#elseif section = "header">
${rb.emailForgotHeader} ${rb.emailForgotHeader}
<#elseif section = "form"> <#elseif section = "form">
<div id="kc-reset-password">
<div id="form">
<p class="instruction">${rb.emailInstruction}</p> <p class="instruction">${rb.emailInstruction}</p>
<form action="${url.loginPasswordResetUrl}" method="post"> <form action="${url.loginPasswordResetUrl}" method="post">
<div> <div class="field-wrapper">
<label for="email">${rb.email}</label><input type="text" id="email" name="email" /> <label for="email">${rb.email}</label><input type="text" id="email" name="email" />
</div> </div>
<input class="btn-primary" type="submit" value="Submit" /> <input class="btn-primary" type="submit" value="Submit" />
</form> </form>
</div> </div>
<#elseif section = "info" > <#elseif section = "info" >
<p><a href="${url.loginUrl}">&laquo; Back to Login</a></p> <p><a href="${url.loginUrl}">${rb.backToLogin}</a></p>
</#if> </#if>
</@layout.registrationLayout> </@layout.registrationLayout>

View file

@ -2,20 +2,17 @@
<@layout.registrationLayout bodyClass=""; section> <@layout.registrationLayout bodyClass=""; section>
<#if section = "title"> <#if section = "title">
${rb.loginTitle} ${realm.name}
Log in to ${realm.name}
<#elseif section = "header"> <#elseif section = "header">
${rb.loginTitle} <strong>${realm.name}</strong>
Log in to <strong>${realm.name}</strong>
<#elseif section = "form"> <#elseif section = "form">
<form id="kc-totp-login-form" action="${url.loginAction}" method="post">
<form action="${url.loginAction}" method="post">
<input id="username" name="username" value="${login.username!''}" type="hidden" /> <input id="username" name="username" value="${login.username!''}" type="hidden" />
<input id="password" name="password" value="${login.password!''}" type="hidden" /> <input id="password" name="password" value="${login.password!''}" type="hidden" />
<div> <div class="field-wrapper">
<label for="totp">${rb.authenticatorCode}</label><input id="totp" name="totp" type="text" /> <label for="totp">${rb.authenticatorCode}</label><input id="totp" name="totp" type="text" />
</div> </div>
@ -24,14 +21,14 @@
<!-- <p>Forgot <a href="#">Username</a> or <a href="#">Password</a>?</p> --> <!-- <p>Forgot <a href="#">Username</a> or <a href="#">Password</a>?</p> -->
</div> </div>
<input class="btn-primary" type="submit" value="Log In" /> <input class="btn-primary" type="submit" value="${rb.logIn}" />
</form> </form>
<#elseif section = "info"> <#elseif section = "info">
<#if realm.registrationAllowed> <#if realm.registrationAllowed>
<div id="kc-totp-register-link">
<p>${rb.noAccount} <a href="${url.registrationUrl}">${rb.register}</a>.</p> <p>${rb.noAccount} <a href="${url.registrationUrl}">${rb.register}</a>.</p>
</#if> </#if>
</div>
</#if> </#if>
</@layout.registrationLayout> </@layout.registrationLayout>

View file

@ -1,32 +1,21 @@
<#import "template.ftl" as layout> <#import "template.ftl" as layout>
<@layout.registrationLayout bodyClass=""; section> <@layout.registrationLayout bodyClass=""; section>
<#if section = "title"> <#if section = "title">
${rb.emailUpdateHeader} ${rb.emailUpdateHeader}
<#elseif section = "header"> <#elseif section = "header">
${rb.emailUpdateHeader} ${rb.emailUpdateHeader}
<#elseif section = "form"> <#elseif section = "form">
<form id="kc-passwd-update-form" action="${url.loginUpdatePasswordUrl}" method="post">
<div id="form"> <div class="field-wrapper">
<form action="${url.loginUpdatePasswordUrl}" method="post">
<div>
<label for="password-new">${rb.passwordNew}</label><input type="password" id="password-new" name="password-new" /> <label for="password-new">${rb.passwordNew}</label><input type="password" id="password-new" name="password-new" />
</div> </div>
<div> <div class="field-wrapper">
<label for="password-confirm" class="two-lines">${rb.passwordConfirm}</label><input type="password" id="password-confirm" name="password-confirm" /> <label for="password-confirm" class="two-lines">${rb.passwordConfirm}</label><input type="password" id="password-confirm" name="password-confirm" />
</div> </div>
<input class="btn-primary" type="submit" value="Submit" /> <input class="btn-primary" type="submit" value="${rb.submit}" />
</form> </form>
</div>
<#elseif section = "info" >
<div id="info">
</div>
</#if> </#if>
</@layout.registrationLayout> </@layout.registrationLayout>

View file

@ -1,37 +1,31 @@
<#import "template.ftl" as layout> <#import "template.ftl" as layout>
<@layout.registrationLayout bodyClass=""; section> <@layout.registrationLayout bodyClass=""; section>
<#if section = "title"> <#if section = "title">
${rb.loginProfileTitle}
Update Account Information
<#elseif section = "header"> <#elseif section = "header">
${rb.loginProfileTitle}
<h2>Update Account Information</h2>
<#elseif section = "feedback"> <#elseif section = "feedback">
<div class="feedback warning show"> <div id="kc-feedback" class="feedback warning show">
<p><strong>Your account is not enabled because you need to update your account information.</strong><br>Please follow the steps below.</p> <p><strong>${rb.loginProfileWarning}</strong><br>${rb.loginProfileWarningFollow}</p>
</div> </div>
<#elseif section = "form"> <#elseif section = "form">
<form id="kc-update-profile-form" action="${url.loginUpdateProfileUrl}" method="post">
<div id="form">
<form action="${url.loginUpdateProfileUrl}" method="post">
<div class="feedback error bottom-left"> <div class="feedback error bottom-left">
<p><strong>Some required fields are empty or incorrect.</strong><br>Please correct the fields in red.</p> <p><strong>${rb.loginProfileError}</strong><br>${rb.loginProfileErrorSteps}</p>
</div> </div>
<p class="subtitle">All fields required</p> <p class="subtitle">All fields required</p>
<div> <div class="field-wrapper">
<label for="email">${rb.email}</label><input type="text" id="email" name="email" value="${user.email!''}" /> <label for="email">${rb.email}</label><input type="text" id="email" name="email" value="${user.email!''}" />
</div> </div class="field-wrapper">
<div> <div class="field-wrapper">
<label for="firstName">${rb.firstName}</label><input type="text" id="firstName" name="firstName" value="${user.firstName!''}" /> <label for="firstName">${rb.firstName}</label><input type="text" id="firstName" name="firstName" value="${user.firstName!''}" />
</div> </div>
<div> <div class="field-wrapper">
<label for="lastName">${rb.lastName}</label><input type="text" id="lastName" name="lastName" value="${user.lastName!''}" /> <label for="lastName">${rb.lastName}</label><input type="text" id="lastName" name="lastName" value="${user.lastName!''}" />
</div> </div>
<input class="btn-primary" type="submit" value="${rb.submit}" />
<input class="btn-primary" type="submit" value="Submit" />
</form> </form>
</div>
</#if> </#if>
</@layout.registrationLayout> </@layout.registrationLayout>

View file

@ -1,25 +1,20 @@
<#import "template.ftl" as layout> <#import "template.ftl" as layout>
<@layout.registrationLayout bodyClass=""; section> <@layout.registrationLayout bodyClass=""; section>
<#if section = "title"> <#if section = "title">
${rb.emailUsernameForgotHeader} ${rb.emailUsernameForgotHeader}
<#elseif section = "header"> <#elseif section = "header">
${rb.emailUsernameForgotHeader} ${rb.emailUsernameForgotHeader}
<#elseif section = "form"> <#elseif section = "form">
<form id="kc-username-reminder-form" action="${url.loginUsernameReminderUrl}" method="post">
<div id="form">
<p class="instruction">${rb.emailUsernameInstruction}</p> <p class="instruction">${rb.emailUsernameInstruction}</p>
<form action="${url.loginUsernameReminderUrl}" method="post"> <div class="field-wrapper">
<div>
<label for="email">${rb.email}</label><input type="text" id="email" name="email" /> <label for="email">${rb.email}</label><input type="text" id="email" name="email" />
</div> </div>
<input class="btn-primary" type="submit" value="Submit" /> <input class="btn-primary" type="submit" value="${rb.submit}" />
</form> </form>
</div>
<#elseif section = "info" > <#elseif section = "info" >
<p><a href="${url.loginUrl}">&laquo; Back to Login</a></p> <p><a href="${url.loginUrl}">${rb.backToLogin}</a></p>
</#if> </#if>
</@layout.registrationLayout> </@layout.registrationLayout>

View file

@ -1,25 +1,19 @@
<#import "template.ftl" as layout> <#import "template.ftl" as layout>
<@layout.registrationLayout bodyClass="email"; section> <@layout.registrationLayout bodyClass="email"; section>
<#if section = "title"> <#if section = "title">
${rb.emailVerifyTitle}
Email verification
<#elseif section = "header"> <#elseif section = "header">
${rb.emailVerifyTitle}
Email verification
<#elseif section = "form"> <#elseif section = "form">
<div id="kc-verify-email" class="app-form">
<div class="app-form">
<p class="instruction"> <p class="instruction">
Your account is not enabled. An email with instructions to verify your email address has been sent to you. ${rb.emailVerifyInstr}
</p> </p>
<p class="instruction">Haven't received a verification code in your email? <p class="instruction">${rb.emailVerifyInstrQ}
<a href="${url.loginEmailVerificationUrl}">Click here</a> to re-send the email. <a href="${url.loginEmailVerificationUrl}">${rb.emailVerifyClick}</a> ${rb.emailVerifyResend}
</p> </p>
</div> </div>
<#elseif section = "info" >
</#if> </#if>
</@layout.registrationLayout> </@layout.registrationLayout>

View file

@ -1,40 +1,31 @@
<#ftl strip_whitespace=true strip_text=true>
<#import "template.ftl" as layout> <#import "template.ftl" as layout>
<@layout.registrationLayout bodyClass=""; section> <@layout.registrationLayout bodyClass=""; section>
<#if section = "title"> <#if section = "title">${rb.loginTitle} ${realm.name}
Log in to ${realm.name}
<#elseif section = "header"> <#elseif section = "header">
${rb.loginTitle} <strong>${(realm.name)!''}</strong>
Log in to <strong>${(realm.name)!''}</strong>
<#elseif section = "form"> <#elseif section = "form">
<form id="kc-form-login" action="${url.loginAction}" method="post">
<div id="form"> <div class="field-wrapper">
<form action="${url.loginAction}" method="post"> <label for="username">${rb.username}</label><input id="username" name="username" value="${login.username!''}" type="text" />
<div>
<label for="username">${rb.username}</label><input id="username" name="username" value="${login.username!''}" type="text" autofocus />
</div> </div>
<div class="field-wrapper">
<div>
<label for="password">${rb.password}</label><input id="password" name="password" type="password" /> <label for="password">${rb.password}</label><input id="password" name="password" type="password" />
</div> </div>
<input class="btn-primary" name="login" type="submit" value="${rb.logIn}"/>
<input class="btn-primary" name="login" type="submit" value="Log In"/> <input class="btn-secondary" name="cancel" type="submit" value="${rb.cancel}"/>
<input class="btn-secondary" name="cancel" type="submit" value="Cancel"/>
</form> </form>
</div>
<#elseif section = "info" > <#elseif section = "info" >
<div id="kc-login-actions">
<div id="info">
<#if realm.registrationAllowed> <#if realm.registrationAllowed>
<p>${rb.noAccount} <a href="${url.registrationUrl}">${rb.register}</a>.</p> <p>${rb.noAccount} <a href="${url.registrationUrl}">${rb.register}</a>.</p>
</#if> </#if>
<#if realm.resetPasswordAllowed> <#if realm.resetPasswordAllowed>
<p>Forgot <a href="${url.loginUsernameReminderUrl}">Username</a> / <a href="${url.loginPasswordResetUrl}">Password</a>?</p> <p>${rb.loginForgot} <a href="${url.loginUsernameReminderUrl}">${rb.username}</a> / <a href="${url.loginPasswordResetUrl}">${rb.password}</a>?</p>
</#if> </#if>
</div> </div>
</#if> </#if>
</@layout.registrationLayout> </@layout.registrationLayout>

View file

@ -18,6 +18,9 @@ password=Password
passwordConfirm=Password confirmation passwordConfirm=Password confirmation
passwordNew=New Password passwordNew=New Password
passwordNewConfirm=New Password confirmation passwordNewConfirm=New Password confirmation
cancel=Cancel
accept=Accept
submit=Submit
authenticatorCode=One-time-password authenticatorCode=One-time-password
clientCertificate=Client Certificate clientCertificate=Client Certificate
@ -43,7 +46,38 @@ successTotpRemoved=Google authenticator removed.
usernameExists=Username already exists usernameExists=Username already exists
loginTitle=Log in to
loginForgot=Forgot
loginTotpTitle=Google Authenticator Setup
loginTotpStep1_1=Download the
loginTotpStep1_2=Google Authenticator app
loginTotpStep1_3=in your device.
loginTotpStep2=Create an account in Google Authenticator and scan the barcode or the provided key below.
loginTotpStep3=Enter the one-time-password provided by Google Authenticator below and click Submit to finish the setup.
loginTotpOneTime=One-time-password
loginProfileTitle=Update Account Information
loginProfileWarning=Your account is not enabled because you need to update your account information.
loginProfileWarningFollow=Please follow the steps below.
loginProfileError=Some required fields are empty or incorrect.
loginProfileErrorSteps=Please correct the fields in red.
oauthGrantTitle=OAuth Grant
oauthGrantTitleHtml=<strong>Keycloak</strong> Central Login
oauthGrantTerms=Keycloak Central Login and Google will use this information in accordance with their respective terms of service and privacy policies.
oauthGrantRequest=requests access to:
emailVerifyTitle=Email verification
emailVerifyInstr=Your account is not enabled. An email with instructions to verify your email address has been sent to you.
emailVerifyInstrQ=Haven't received a verification code in your email?
emailVerifyClick=Click here
emailVerifyResend=to re-send the email.
error=A system error has occured, contact admin error=A system error has occured, contact admin
errorTitle=We're sorry...
errorTitleHtml=We're <strong>sorry</strong> ...
errorGenericMsg=Something happened and we could not process your request.
actionWarningHeader=Your account is not enabled. actionWarningHeader=Your account is not enabled.
actionTotpWarning=You need to set up the Google Authenticator to activate your account. actionTotpWarning=You need to set up the Google Authenticator to activate your account.
actionProfileWarning=You need to update your user profile to activate your account. actionProfileWarning=You need to update your user profile to activate your account.
@ -57,6 +91,7 @@ errorHeader=Error!
# Forgot password part # Forgot password part
emailForgotHeader=Forgot Your Password? emailForgotHeader=Forgot Your Password?
backToLogin=&laquo; Back to Login
emailUpdateHeader=Update password emailUpdateHeader=Update password
emailSent=You should receive an email shortly with further instructions. emailSent=You should receive an email shortly with further instructions.
emailSendError=Failed to send email, please try again later emailSendError=Failed to send email, please try again later

View file

@ -1,44 +1,38 @@
<#import "template.ftl" as layout> <#import "template.ftl" as layout>
<@layout.registrationLayout bodyClass="register" ; section> <@layout.registrationLayout bodyClass="register" ; section>
<#if section = "title"> <#if section = "title">
${rb.registerWith} ${realm.name} ${rb.registerWith} ${realm.name}
<#elseif section = "header"> <#elseif section = "header">
${rb.registerWith} <strong>${realm.name}</strong> ${rb.registerWith} <strong>${realm.name}</strong>
<#elseif section = "form"> <#elseif section = "form">
<form id="kc-register-form" action="${url.registrationAction}" method="post">
<form action="${url.registrationAction}" method="post">
<p class="subtitle">${rb.allRequired}</p> <p class="subtitle">${rb.allRequired}</p>
<div> <div class="field-wrapper">
<label for="firstName">${rb.firstName}</label><input type="text" id="firstName" name="firstName" value="${register.formData.firstName!''}" /> <label for="firstName">${rb.firstName}</label><input type="text" id="firstName" name="firstName" value="${register.formData.firstName!''}" />
</div> </div>
<div> <div class="field-wrapper">
<label for="lastName">${rb.lastName}</label><input type="text" id="lastName" name="lastName" value="${register.formData.lastName!''}" /> <label for="lastName">${rb.lastName}</label><input type="text" id="lastName" name="lastName" value="${register.formData.lastName!''}" />
</div> </div>
<div> <div class="field-wrapper">
<label for="email">${rb.email}</label><input type="text" id="email" name="email" value="${register.formData.email!''}" /> <label for="email">${rb.email}</label><input type="text" id="email" name="email" value="${register.formData.email!''}" />
</div> </div>
<div> <div class="field-wrapper">
<label for="username">${rb.username}</label><input type="text" id="username" name="username" value="${register.formData.username!''}" /> <label for="username">${rb.username}</label><input type="text" id="username" name="username" value="${register.formData.username!''}" />
</div> </div>
<div> <div class="field-wrapper">
<label for="password">${rb.password}</label><input type="password" id="password" name="password" /> <label for="password">${rb.password}</label><input type="password" id="password" name="password" />
</div> </div>
<div> <div class="field-wrapper">
<label for="password-confirm">${rb.passwordConfirm}</label><input type="password" id="password-confirm" name="password-confirm" /> <label for="password-confirm">${rb.passwordConfirm}</label><input type="password" id="password-confirm" name="password-confirm" />
</div> </div>
<input class="btn-primary" type="submit" value="Register"/> <input class="btn-primary" type="submit" value="${rb.register}"/>
</form> </form>
<#elseif section = "info"> <#elseif section = "info">
<p>${rb.alreadyHaveAccount} <a href="${url.loginUrl}">${rb.logIn}</a>.</p> <p>${rb.alreadyHaveAccount} <a href="${url.loginUrl}">${rb.logIn}</a>.</p>
</#if> </#if>
</@layout.registrationLayout> </@layout.registrationLayout>

View file

@ -5,7 +5,7 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><#nested "title"></title> <title><#nested "title"></title>
<link rel="icon" href="${url.resourcesPath}/img/favicon.ico"> <link rel="icon" href="${url.resourcesPath}/img/favicon.ico" />
<#if properties.styles?has_content> <#if properties.styles?has_content>
<#list properties.styles?split(' ') as style> <#list properties.styles?split(' ') as style>
<link href="${url.resourcesPath}/${style}" rel="stylesheet" /> <link href="${url.resourcesPath}/${style}" rel="stylesheet" />
@ -18,14 +18,10 @@
</#if> </#if>
</head> </head>
<body class="rcue-login-register ${bodyClass}"> <body class="kc-login-register ${bodyClass}">
<div class="rcue-logo"></div> <h1 class="kc-title">KeyCloak</h1>
<div class="content"> <div class="content">
<h2> <h2 id="kc-header"><#nested "header"></h2>
<#nested "header">
</h2>
<div class="background-area"> <div class="background-area">
<#if !forceSeparator && realm?has_content> <#if !forceSeparator && realm?has_content>
<#assign drawSeparator = realm.registrationAllowed> <#assign drawSeparator = realm.registrationAllowed>
@ -41,7 +37,6 @@
</#if> </#if>
<#nested "form"> <#nested "form">
</div> </div>
<#if social.displaySocialProviders> <#if social.displaySocialProviders>
<div class="section social-login"> <span>or</span> <div class="section social-login"> <span>or</span>
<p>${rb.logInWith}</p> <p>${rb.logInWith}</p>
@ -52,20 +47,15 @@
</ul> </ul>
</div> </div>
</#if> </#if>
<div class="section info-area"> <div class="section info-area">
<#nested "info"> <#nested "info">
</div> </div>
</div> </div>
</div> </div>
<p class="powered"> <p class="powered">
<a href="http://www.keycloak.org">${rb.poweredByKeycloak}</a> <a href="http://www.keycloak.org">${rb.poweredByKeycloak}</a>
</p> </p>
</div> </div>
<#nested "content">
</body> </body>
</html> </html>
</#macro> </#macro>

View file

@ -1,4 +1,5 @@
body.rcue-login-register { @IMPORT url("../../rcue/css/styles.css");
background: #083556;
background-image: none; body {
xbackground: #083556 !important;
} }

View file

@ -189,11 +189,11 @@ button.primary:enabled:active {
box-shadow: inset 0 0 5px 3px #0074ae; box-shadow: inset 0 0 5px 3px #0074ae;
} }
/* Code from Gabriel */ /* Code from Gabriel */
.rcue-login-register.register .two-fields input[type="text"] { .kc-login-register.register .two-fields input[type="text"] {
width: 121px; width: 121px;
min-width: 0; min-width: 0;
} }
.rcue-login-register.register .two-fields input + input { .kc-login-register.register .two-fields input + input {
margin-left: 10px; margin-left: 10px;
} }
.search-comp { .search-comp {

View file

@ -4,13 +4,14 @@ body {
min-width: 120em; min-width: 120em;
} }
body.rcue-login-register { body.kc-login-register {
background-image: url("../img/login-screen-background.jpg"); background-image: url("../img/login-screen-background.jpg");
} }
div.rcue-logo { .kc-title {
background-image: url("../img/keycloak-logo.png"); background-image: url("../img/keycloak-logo.png");
background-repeat: no-repeat; background-repeat: no-repeat;
text-indent: -9999px;
height: 37px; height: 37px;
width: 150px; width: 150px;
position: absolute; position: absolute;
@ -18,7 +19,7 @@ div.rcue-logo {
right: 6.4em; right: 6.4em;
} }
.rcue-login-register { .kc-login-register {
background-color: #1D2226; background-color: #1D2226;
background-position: top left; background-position: top left;
background-size: auto; background-size: auto;
@ -32,18 +33,18 @@ div.rcue-logo {
} }
.rcue-login-register h1 a { .kc-login-register h1 a {
position: absolute; position: absolute;
top: 5em; top: 5em;
right: 6.4em; right: 6.4em;
} }
.rcue-login-register .content { .kc-login-register .content {
position: absolute; position: absolute;
bottom: 10%; bottom: 10%;
width: 100%; width: 100%;
min-width: 76em; min-width: 76em;
} }
.rcue-login-register h2 { .kc-login-register h2 {
padding-left: 4.34782608695652em; padding-left: 4.34782608695652em;
font-family: "Overpass", sans-serif; font-family: "Overpass", sans-serif;
font-size: 2.3em; font-size: 2.3em;
@ -51,10 +52,10 @@ div.rcue-logo {
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.005em; letter-spacing: 0.005em;
} }
.rcue-login-register h2 strong { .kc-login-register h2 strong {
font-weight: bold; font-weight: bold;
} }
.rcue-login-register .background-area { .kc-login-register .background-area {
border-top: 0.1em rgba(255, 255, 255, 0.05) solid; border-top: 0.1em rgba(255, 255, 255, 0.05) solid;
border-bottom: 0.1em rgba(255, 255, 255, 0.05) solid; border-bottom: 0.1em rgba(255, 255, 255, 0.05) solid;
background-color: rgba(0, 0, 0, 0.3); background-color: rgba(0, 0, 0, 0.3);
@ -63,115 +64,115 @@ div.rcue-logo {
width: 100%; width: 100%;
min-width: 120em; min-width: 120em;
} }
.rcue-login-register .form-area.separator, .kc-login-register .form-area.separator,
.rcue-login-register .form-area.social, .kc-login-register .form-area.social,
.rcue-login-register .form-area.social.separator { .kc-login-register .form-area.social.separator {
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: 42.7em center; background-position: 42.7em center;
} }
.rcue-login-register .form-area.separator { .kc-login-register .form-area.separator {
background-image: url(../img/login-register-separator.png); background-image: url(../img/login-register-separator.png);
background-position: 43.2em center; background-position: 43.2em center;
} }
.rcue-login-register .form-area.social { .kc-login-register .form-area.social {
background-image: url(../img/login-register-social.png); background-image: url(../img/login-register-social.png);
} }
.rcue-login-register .form-area.social.separator { .kc-login-register .form-area.social.separator {
background-image: url(../img/login-register-social-separator.png); background-image: url(../img/login-register-social-separator.png);
} }
.rcue-login-register .background-area .section { .kc-login-register .background-area .section {
float: left; float: left;
padding: 0 4.5em 0 4.6em; padding: 0 4.5em 0 4.6em;
width: auto; width: auto;
position: relative; position: relative;
} }
.rcue-login-register .background-area .section, .kc-login-register .background-area .section,
.rcue-login-register .background-area .social .section { .kc-login-register .background-area .social .section {
padding-top: 1.5em; padding-top: 1.5em;
padding-bottom: 1.5em; padding-bottom: 1.5em;
} }
.rcue-login-register .background-area .section h3 { .kc-login-register .background-area .section h3 {
display: none; display: none;
} }
.rcue-login-register .background-area .section:first-child { .kc-login-register .background-area .section:first-child {
padding-right: 4.5em; padding-right: 4.5em;
} }
.rcue-login-register .section > p { .kc-login-register .section > p {
font-size: 1.3em; font-size: 1.3em;
margin-bottom: 1.53846153846154em; margin-bottom: 1.53846153846154em;
line-height: 1.3em; line-height: 1.3em;
} }
.rcue-login-register .section.app-form { .kc-login-register .section.app-form {
padding-left: 0; padding-left: 0;
position: relative; position: relative;
} }
.rcue-login-register form > div { .kc-login-register form > div {
margin-bottom: 1em; margin-bottom: 1em;
} }
.rcue-login-register label, .kc-login-register label,
.rcue-login-register .social-login > p { .kc-login-register .social-login > p {
display: inline-block; display: inline-block;
font-size: 1.4em; font-size: 1.4em;
font-weight: 400; font-weight: 400;
} }
.rcue-login-register label { .kc-login-register label {
width: 8.21428571428571em; width: 8.21428571428571em;
} }
.rcue-login-register label.two-lines { .kc-login-register label.two-lines {
float: left; float: left;
margin-top: -0.14285714285714em; margin-top: -0.14285714285714em;
line-height: 1.1em; line-height: 1.1em;
} }
.rcue-login-register input[type="text"], .kc-login-register input[type="text"],
.rcue-login-register input[type="password"] { .kc-login-register input[type="password"] {
width: 24.7272727272727em; width: 24.7272727272727em;
/* 272px */ /* 272px */
} }
.rcue-login-register form > div.aside-btn { .kc-login-register form > div.aside-btn {
float: left; float: left;
font-size: 1.1em; font-size: 1.1em;
margin-left: 10.4545454545454em; margin-left: 10.4545454545454em;
margin-top: 0.90909090909091em; margin-top: 0.90909090909091em;
margin-bottom: 0; margin-bottom: 0;
} }
.rcue-login-register form > div.aside-btn label { .kc-login-register form > div.aside-btn label {
font-size: 1em; font-size: 1em;
width: auto; width: auto;
} }
.rcue-login-register form > div.aside-btn input[type="checkbox"] { .kc-login-register form > div.aside-btn input[type="checkbox"] {
margin-bottom: 0.54545454545455em; margin-bottom: 0.54545454545455em;
/* 6px */ /* 6px */
} }
.rcue-login-register form > input[type="button"], .kc-login-register form > input[type="button"],
.rcue-login-register form > input[type="submit"]{ .kc-login-register form > input[type="submit"]{
float: right; float: right;
margin-top: 0.76923076923077em; margin-top: 0.76923076923077em;
margin-left: 0.90909090909091em; margin-left: 0.90909090909091em;
/* 10px */ /* 10px */
} }
.rcue-login-register p.subtitle { .kc-login-register p.subtitle {
font-size: 1.1em; font-size: 1.1em;
color: #999; color: #999;
position: absolute; position: absolute;
right: 4.09090909090909em; right: 4.09090909090909em;
top: -0.636363636363636em; top: -0.636363636363636em;
} }
.rcue-login-register .feedback.bottom-left { .kc-login-register .feedback.bottom-left {
left: 35.7em; left: 35.7em;
bottom: 17em; bottom: 17em;
min-width: 35em; min-width: 35em;
} }
.rcue-login-register input.error[type="text"], .kc-login-register input.error[type="text"],
.rcue-login-register input.error[type="password"], .kc-login-register input.error[type="password"],
.rcue-login-register input.error[type="email"] { .kc-login-register input.error[type="email"] {
background-color: #F8E7E7; background-color: #F8E7E7;
} }
.rcue-login-register .section.social-login > span { .kc-login-register .section.social-login > span {
display: none; display: none;
} }
.rcue-login-register .section.social-login > p { .kc-login-register .section.social-login > p {
float: left; float: left;
margin-top: 0.28571428571429em; margin-top: 0.28571428571429em;
/* 14px */ /* 14px */
@ -180,32 +181,32 @@ div.rcue-logo {
/* 95px */ /* 95px */
} }
.rcue-login-register .section.social-login > ul { .kc-login-register .section.social-login > ul {
float: left; float: left;
} }
.rcue-login-register .section.social-login li { .kc-login-register .section.social-login li {
margin-bottom: 2em; margin-bottom: 2em;
} }
.rcue-login-register .section.social-login li:last-child { .kc-login-register .section.social-login li:last-child {
margin-bottom: 0; margin-bottom: 0;
} }
.rcue-login-register .section.info-area { .kc-login-register .section.info-area {
padding-right: 0; padding-right: 0;
} }
.rcue-login-register .section.info-area p, .kc-login-register .section.info-area p,
.rcue-login-register .section.info-area li { .kc-login-register .section.info-area li {
font-size: 1.4em; font-size: 1.4em;
margin-bottom: 1.64285714285714em; margin-bottom: 1.64285714285714em;
} }
.rcue-login-register .section.info-area li { .kc-login-register .section.info-area li {
color: #999; color: #999;
margin-bottom: 1em; margin-bottom: 1em;
} }
.rcue-login-register .section.info-area li:last-child { .kc-login-register .section.info-area li:last-child {
margin-bottom: 0; margin-bottom: 0;
} }
@media screen and (min-width: 1280px) { @media screen and (min-width: 1280px) {
.rcue-login-register { .kc-login-register {
background-size: 100% auto; background-size: 100% auto;
} }
} }
@ -265,19 +266,19 @@ a.zocial:before {
/* 32px */ /* 32px */
} }
/* Register page */ /* Register page */
.rcue-login-register.register label { .kc-login-register.register label {
width: 7.5em; width: 7.5em;
/* 105px */ /* 105px */
} }
.rcue-login-register.register input[type="text"], .kc-login-register.register input[type="text"],
.rcue-login-register.register input[type="email"], .kc-login-register.register input[type="email"],
.rcue-login-register.register input[type="password"] { .kc-login-register.register input[type="password"] {
width: 22.9090909090909em; width: 22.9090909090909em;
/* 252px */ /* 252px */
} }
.rcue-login-register.register form > div.aside-btn { .kc-login-register.register form > div.aside-btn {
margin-left: 9.54545454545454em; margin-left: 9.54545454545454em;
/* 105px */ /* 105px */
@ -285,111 +286,111 @@ a.zocial:before {
/* 138px */ /* 138px */
} }
.rcue-login-register.register form > div.aside-btn p { .kc-login-register.register form > div.aside-btn p {
line-height: 1.3em; line-height: 1.3em;
} }
.rcue-login-register p.powered { .kc-login-register p.powered {
font-size: 1.1em; font-size: 1.1em;
margin-top: 1.27272727272727em; margin-top: 1.27272727272727em;
text-align: right; text-align: right;
margin-right: 5.81818181818182em; margin-right: 5.81818181818182em;
} }
.rcue-login-register p.powered a { .kc-login-register p.powered a {
color: #666; color: #666;
} }
.rcue-login-register p.powered a:hover { .kc-login-register p.powered a:hover {
color: #0099D3; color: #0099D3;
} }
/* Forgot Password page */ /* Forgot Password page */
.rcue-login-register.reset .background-area .section.app-form { .kc-login-register.reset .background-area .section.app-form {
width: 43.2em; width: 43.2em;
} }
.rcue-login-register.oauth .form-actions { .kc-login-register.oauth .form-actions {
margin-bottom: 0; margin-bottom: 0;
margin-top: 2em; margin-top: 2em;
} }
.rcue-login-register .background-area .content-area { .kc-login-register .background-area .content-area {
width: 50em; width: 50em;
} }
.rcue-login-register .background-area .content-area ul { .kc-login-register .background-area .content-area ul {
border-bottom: 1px solid #34393C; border-bottom: 1px solid #34393C;
margin-bottom: 2em; margin-bottom: 2em;
} }
.rcue-login-register .background-area .content-area ul li { .kc-login-register .background-area .content-area ul li {
border-top: 1px solid #34393C; border-top: 1px solid #34393C;
padding: 2em; padding: 2em;
position: relative; position: relative;
} }
.rcue-login-register .background-area .content-area ul li span { .kc-login-register .background-area .content-area ul li span {
font-size: 1.3em; font-size: 1.3em;
line-height: 1.3em; line-height: 1.3em;
} }
.rcue-login-register .background-area .content-area ul li span:first-child { .kc-login-register .background-area .content-area ul li span:first-child {
padding-right: 11.5384615384615em; padding-right: 11.5384615384615em;
} }
.rcue-login-register .background-area .content-area ul li span.parent { .kc-login-register .background-area .content-area ul li span.parent {
position: absolute; position: absolute;
left: 26em; left: 26em;
top: 1.53846153846154em; top: 1.53846153846154em;
width: 12.3076923076923em; width: 12.3076923076923em;
} }
.rcue-login-register .background-area .content-area ul li span.icon-info { .kc-login-register .background-area .content-area ul li span.icon-info {
float: right; float: right;
margin-top: 0.5em; margin-top: 0.5em;
} }
.rcue-login-register .background-area .content-area p.terms { .kc-login-register .background-area .content-area p.terms {
color: #999999; color: #999999;
font-size: 1.1em; font-size: 1.1em;
line-height: 1.3em; line-height: 1.3em;
} }
.rcue-login-register.reset p.subtitle { .kc-login-register.reset p.subtitle {
margin-bottom: 10px; margin-bottom: 10px;
position: inherit; position: inherit;
text-align: right; text-align: right;
} }
.rcue-login-register .background-area p.instruction { .kc-login-register .background-area p.instruction {
font-size: 1.3em; font-size: 1.3em;
line-height: 1.3em; line-height: 1.3em;
margin-bottom: 1.53846em; margin-bottom: 1.53846em;
} }
.rcue-login-register .background-area p.instruction.instruction.second { .kc-login-register .background-area p.instruction.instruction.second {
color: #999999; color: #999999;
} }
.rcue-login-register .background-area p.instruction + .instruction.second { .kc-login-register .background-area p.instruction + .instruction.second {
margin-top: -1.23077em; margin-top: -1.23077em;
} }
.rcue-login-register .background-area a.link-right { .kc-login-register .background-area a.link-right {
float: right; float: right;
font-size: 1.3em; font-size: 1.3em;
} }
.rcue-login-register.totp .form-area { .kc-login-register.totp .form-area {
background-image: none; background-image: none;
} }
.rcue-login-register.reset .form-area p.instruction { .kc-login-register.reset .form-area p.instruction {
font-size: 1.3em; font-size: 1.3em;
line-height: 1.3em; line-height: 1.3em;
margin-bottom: 1.81818181818182em; margin-bottom: 1.81818181818182em;
} }
.rcue-login-register.totp { .kc-login-register.totp {
min-height: 0; min-height: 0;
} }
.rcue-login-register.totp ol li { .kc-login-register.totp ol li {
margin-bottom: 3em; margin-bottom: 3em;
width: 100%; width: 100%;
} }
.rcue-login-register.totp ol li p { .kc-login-register.totp ol li p {
font-size: 1.3em; font-size: 1.3em;
margin-bottom: 1.92307692307692em; margin-bottom: 1.92307692307692em;
} }
.rcue-login-register.totp ol li p strong { .kc-login-register.totp ol li p strong {
text-indent: -1em; text-indent: -1em;
float: left; float: left;
font-size: 1.84615384615385em; font-size: 1.84615384615385em;
@ -397,40 +398,40 @@ a.zocial:before {
margin-top: -0.20833333333333em; margin-top: -0.20833333333333em;
color: #999; color: #999;
} }
.rcue-login-register.totp ol li img { .kc-login-register.totp ol li img {
border: 7px solid #fff; border: 7px solid #fff;
width: 150px; width: 150px;
} }
.rcue-login-register.totp ol li .code { .kc-login-register.totp ol li .code {
font-size: 1.3em; font-size: 1.3em;
margin-left: 1.53846153846154em; margin-left: 1.53846153846154em;
} }
.rcue-login-register.totp ol li form { .kc-login-register.totp ol li form {
width: 357px; width: 357px;
} }
.rcue-login-register.totp ol li form input[type="text"] { .kc-login-register.totp ol li form input[type="text"] {
width: 22em; width: 22em;
} }
.rcue-login-register.totp ol li form input[type="submit"] { .kc-login-register.totp ol li form input[type="submit"] {
float: right; float: right;
} }
.rcue-login-register.totp ol li:last-child { .kc-login-register.totp ol li:last-child {
margin-bottom: 0; margin-bottom: 0;
} }
.rcue-login-register.totp .content { .kc-login-register.totp .content {
position: inherit; position: inherit;
margin-top: 16em; margin-top: 16em;
} }
.rcue-login-register.email .background-area .section { .kc-login-register.email .background-area .section {
width: 41.2em; width: 41.2em;
} }
.rcue-login-register.email .background-area .section.email { .kc-login-register.email .background-area .section.email {
width: 45.8em; width: 45.8em;
} }
.rcue-login-register.email label { .kc-login-register.email label {
width: 6.78571428571429em; width: 6.78571428571429em;
} }
.rcue-login-register.email .feedback.bottom-left { .kc-login-register.email .feedback.bottom-left {
left: 38.3em; left: 38.3em;
} }