1
0
mirror of https://github.com/bitwarden/browser.git synced 2024-09-06 00:48:08 +02:00

Merge pull request #557 from bitwarden/feature/enterprise-landing-page

Layout images and styling for register page
This commit is contained in:
Chad Scharf 2020-06-11 12:04:18 -04:00 committed by GitHub
commit 7432ad310c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 196 additions and 111 deletions

View File

@ -1,129 +1,149 @@
<form #form (ngSubmit)="submit()" [appApiAction]="formPromise" class="container" ngNativeValidate> <div class="layout" [ngClass]="['layout', layout]">
<div class="row"> <header class="header" *ngIf="layout === 'enterprise2'">
<div class="col-7" *ngIf="layout"> <div class="container">
<div class="mt-5"> <div class="row">
<div *ngIf="layout === 'enterprise2'"> <div class="col-7">
<p>Companies globally trust Bitwarden for password management.</p> <img alt="Bitwarden" class="logo mb-2" src="../../images/register-layout/logo-horizontal-white.png">
<p>Start your 7-day free trial!</p>
<p>Quickly deploy your <b>organization</b></p>
<p>Use Bitwarden across all platforms</p>
<p>Collaborate and share securely</p>
<p>"Bitwarden has become a popular choice among open-source software advocates. After using it for a
few months, I can see why." - February 2020</p>
</div>
<div *ngIf="layout === 'enterprise3'">
<p>Enterprise 3 layout</p>
</div>
<div *ngIf="layout === 'enterprise4'">
<p>Enterprise 4 layout</p>
</div> </div>
</div> </div>
</div> </div>
<div [ngClass]="{'col-5': layout, 'col-12': !layout}"> </header>
<div class="row justify-content-md-center mt-5"> <form #form (ngSubmit)="submit()" [appApiAction]="formPromise" class="container" ngNativeValidate>
<div [ngClass]="{'col-5': !layout, 'col-12': layout}"> <div class="row">
<p class="lead text-center mb-4" *ngIf="!layout">{{'createAccount' | i18n}}</p> <div class="col-7" *ngIf="layout">
<div class="card d-block"> <div class="mt-5">
<div class="card-body"> <div *ngIf="layout === 'enterprise2'">
<app-callout title="{{'createOrganizationStep1' | i18n}}" type="info" icon="fa-thumb-tack" <h2>Companies globally trust Bitwarden for password management.</h2>
*ngIf="showCreateOrgMessage"> <p>Start your 7-day free trial!</p>
{{'createOrganizationCreatePersonalAccount' | i18n}} <p class="highlight">Quickly deploy your <b>organization</b></p>
</app-callout> <p>Use Bitwarden across all platforms</p>
<div class="form-group"> <p>Collaborate and share securely</p>
<label for="email">{{'emailAddress' | i18n}}</label> <figure>
<input id="email" class="form-control" type="text" name="Email" [(ngModel)]="email" <figcaption>
required [appAutofocus]="email === ''" inputmode="email" appInputVerbatim="false"> <cite>
<small class="form-text text-muted">{{'emailAddressDesc' | i18n}}</small> <img src="../../images/register-layout/wired-logo.png" alt="Wired">
</div> </cite>
<div class="form-group"> </figcaption>
<label for="name">{{'yourName' | i18n}}</label> <blockquote>
<input id="name" class="form-control" type="text" name="Name" [(ngModel)]="name" "Bitwarden has become a popular choice among open-source software advocates. After using it for a
[appAutofocus]="email !== ''"> few months, I can see why." - February 2020
<small class="form-text text-muted">{{'yourNameDesc' | i18n}}</small> </blockquote>
</div> </figure>
<div class="form-group"> </div>
<app-callout type="info" *ngIf="enforcedPolicyOptions"> <div *ngIf="layout === 'enterprise3'">
{{'masterPasswordPolicyInEffect' | i18n}} <p>Enterprise 3 layout</p>
<ul class="mb-0"> </div>
<li *ngIf="enforcedPolicyOptions?.minComplexity > 0"> <div *ngIf="layout === 'enterprise4'">
{{'policyInEffectMinComplexity' | i18n : getPasswordScoreAlertDisplay()}} <p>Enterprise 4 layout</p>
</li> </div>
<li *ngIf="enforcedPolicyOptions?.minLength > 0"> </div>
{{'policyInEffectMinLength' | i18n : enforcedPolicyOptions?.minLength.toString()}} </div>
</li> <div [ngClass]="{'col-5': layout, 'col-12': !layout}">
<li *ngIf="enforcedPolicyOptions?.requireUpper"> <div class="row justify-content-md-center mt-5">
{{'policyInEffectUppercase' | i18n}}</li> <div [ngClass]="{'col-5': !layout, 'col-12': layout}">
<li *ngIf="enforcedPolicyOptions?.requireLower"> <p class="lead text-center mb-4" *ngIf="!layout">{{'createAccount' | i18n}}</p>
{{'policyInEffectLowercase' | i18n}}</li> <div class="card d-block">
<li *ngIf="enforcedPolicyOptions?.requireNumbers"> <div class="card-body">
{{'policyInEffectNumbers' | i18n}}</li> <app-callout title="{{'createOrganizationStep1' | i18n}}" type="info" icon="fa-thumb-tack"
<li *ngIf="enforcedPolicyOptions?.requireSpecial"> *ngIf="showCreateOrgMessage">
{{'policyInEffectSpecial' | i18n : '!@#$%^&*'}}</li> {{'createOrganizationCreatePersonalAccount' | i18n}}
</ul>
</app-callout> </app-callout>
<label for="masterPassword">{{'masterPass' | i18n}}</label> <div class="form-group">
<div class="d-flex"> <label for="email">{{'emailAddress' | i18n}}</label>
<div class="w-100"> <input id="email" class="form-control" type="text" name="Email" [(ngModel)]="email"
<input id="masterPassword" type="{{showPassword ? 'text' : 'password'}}" required [appAutofocus]="email === ''" inputmode="email" appInputVerbatim="false">
name="MasterPassword" class="text-monospace form-control mb-1" <small class="form-text text-muted">{{'emailAddressDesc' | i18n}}</small>
[(ngModel)]="masterPassword" (input)="updatePasswordStrength()" required </div>
appInputVerbatim> <div class="form-group">
<app-password-strength [score]="masterPasswordScore" [showText]="true"> <label for="name">{{'yourName' | i18n}}</label>
</app-password-strength> <input id="name" class="form-control" type="text" name="Name" [(ngModel)]="name"
[appAutofocus]="email !== ''">
<small class="form-text text-muted">{{'yourNameDesc' | i18n}}</small>
</div>
<div class="form-group">
<app-callout type="info" *ngIf="enforcedPolicyOptions">
{{'masterPasswordPolicyInEffect' | i18n}}
<ul class="mb-0">
<li *ngIf="enforcedPolicyOptions?.minComplexity > 0">
{{'policyInEffectMinComplexity' | i18n : getPasswordScoreAlertDisplay()}}
</li>
<li *ngIf="enforcedPolicyOptions?.minLength > 0">
{{'policyInEffectMinLength' | i18n : enforcedPolicyOptions?.minLength.toString()}}
</li>
<li *ngIf="enforcedPolicyOptions?.requireUpper">
{{'policyInEffectUppercase' | i18n}}</li>
<li *ngIf="enforcedPolicyOptions?.requireLower">
{{'policyInEffectLowercase' | i18n}}</li>
<li *ngIf="enforcedPolicyOptions?.requireNumbers">
{{'policyInEffectNumbers' | i18n}}</li>
<li *ngIf="enforcedPolicyOptions?.requireSpecial">
{{'policyInEffectSpecial' | i18n : '!@#$%^&*'}}</li>
</ul>
</app-callout>
<label for="masterPassword">{{'masterPass' | i18n}}</label>
<div class="d-flex">
<div class="w-100">
<input id="masterPassword" type="{{showPassword ? 'text' : 'password'}}"
name="MasterPassword" class="text-monospace form-control mb-1"
[(ngModel)]="masterPassword" (input)="updatePasswordStrength()" required
appInputVerbatim>
<app-password-strength [score]="masterPasswordScore" [showText]="true">
</app-password-strength>
</div>
<div>
<button type="button" class="ml-1 btn btn-link"
appA11yTitle="{{'toggleVisibility' | i18n}}"
(click)="togglePassword(false)">
<i class="fa fa-lg" aria-hidden="true"
[ngClass]="{'fa-eye': !showPassword, 'fa-eye-slash': showPassword}"></i>
</button>
<div class="progress-bar invisible"></div>
</div>
</div> </div>
<div> <small class="form-text text-muted">{{'masterPassDesc' | i18n}}</small>
</div>
<div class="form-group">
<label for="masterPasswordRetype">{{'reTypeMasterPass' | i18n}}</label>
<div class="d-flex">
<input id="masterPasswordRetype" type="{{showPassword ? 'text' : 'password'}}"
name="MasterPasswordRetype" class="text-monospace form-control"
[(ngModel)]="confirmMasterPassword" required appInputVerbatim>
<button type="button" class="ml-1 btn btn-link" <button type="button" class="ml-1 btn btn-link"
appA11yTitle="{{'toggleVisibility' | i18n}}" appA11yTitle="{{'toggleVisibility' | i18n}}" (click)="togglePassword(true)">
(click)="togglePassword(false)">
<i class="fa fa-lg" aria-hidden="true" <i class="fa fa-lg" aria-hidden="true"
[ngClass]="{'fa-eye': !showPassword, 'fa-eye-slash': showPassword}"></i> [ngClass]="{'fa-eye': !showPassword, 'fa-eye-slash': showPassword}"></i>
</button> </button>
<div class="progress-bar invisible"></div>
</div> </div>
</div> </div>
<small class="form-text text-muted">{{'masterPassDesc' | i18n}}</small> <div class="form-group">
</div> <label for="hint">{{'masterPassHint' | i18n}}</label>
<div class="form-group"> <input id="hint" class="form-control" type="text" name="Hint" [(ngModel)]="hint">
<label for="masterPasswordRetype">{{'reTypeMasterPass' | i18n}}</label> <small class="form-text text-muted">{{'masterPassHintDesc' | i18n}}</small>
<div class="d-flex">
<input id="masterPasswordRetype" type="{{showPassword ? 'text' : 'password'}}"
name="MasterPasswordRetype" class="text-monospace form-control"
[(ngModel)]="confirmMasterPassword" required appInputVerbatim>
<button type="button" class="ml-1 btn btn-link"
appA11yTitle="{{'toggleVisibility' | i18n}}" (click)="togglePassword(true)">
<i class="fa fa-lg" aria-hidden="true"
[ngClass]="{'fa-eye': !showPassword, 'fa-eye-slash': showPassword}"></i>
</button>
</div> </div>
<hr>
<div class="d-flex mb-2">
<button type="submit" class="btn btn-primary btn-block btn-submit"
[disabled]="form.loading">
<span>{{'submit' | i18n}}</span>
<i class="fa fa-spinner fa-spin" title="{{'loading' | i18n}}"
aria-hidden="true"></i>
</button>
<a routerLink="/" class="btn btn-outline-secondary btn-block ml-2 mt-0">
{{'cancel' | i18n}}
</a>
</div>
<small class="text-muted" *ngIf="showTerms">
{{'submitAgreePolicies' | i18n}}
<a href="https://bitwarden.com/terms/" target="_blank"
rel="noopener">{{'termsOfService' | i18n}}</a>,
<a href="https://bitwarden.com/privacy/" target="_blank"
rel="noopener">{{'privacyPolicy' | i18n}}</a>
</small>
</div> </div>
<div class="form-group">
<label for="hint">{{'masterPassHint' | i18n}}</label>
<input id="hint" class="form-control" type="text" name="Hint" [(ngModel)]="hint">
<small class="form-text text-muted">{{'masterPassHintDesc' | i18n}}</small>
</div>
<hr>
<div class="d-flex mb-2">
<button type="submit" class="btn btn-primary btn-block btn-submit"
[disabled]="form.loading">
<span>{{'submit' | i18n}}</span>
<i class="fa fa-spinner fa-spin" title="{{'loading' | i18n}}"
aria-hidden="true"></i>
</button>
<a routerLink="/" class="btn btn-outline-secondary btn-block ml-2 mt-0">
{{'cancel' | i18n}}
</a>
</div>
<small class="text-muted" *ngIf="showTerms">
{{'submitAgreePolicies' | i18n}}
<a href="https://bitwarden.com/terms/" target="_blank"
rel="noopener">{{'termsOfService' | i18n}}</a>,
<a href="https://bitwarden.com/privacy/" target="_blank"
rel="noopener">{{'privacyPolicy' | i18n}}</a>
</small>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </form>
</form> </div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -0,0 +1,63 @@
.layout {
&.enterprise2 {
header {
color: $secondary;
background-color: $primary;
&:before {
content: "";
position: absolute;
z-index: -1;
width: 100%;
height: 340px;
left: 0;
transform: skewY(-3deg);
background: $primary;
}
img.logo {
margin: 12px 0 0;
width: 284px;
max-width: 284px;
height: auto;
}
}
h2 {
color: #ffffff;
font-size: 1.8rem;
margin: 100px 0 150px 0;
}
p {
margin: 20px 0 40px 0;
font-size: 1.4rem;
&:before {
content: "/";
padding-right: 12px;
}
&:not(.highlight) {
&:before {
color: $primary-accent;
}
}
b {
&:after {
content: "";
font-size: 2rem;
padding-left: 6px;
}
}
}
blockquote {
margin: 20px 0 0 0;
font-size: 1.4rem;
padding-right: 40px;
}
}
}

View File

@ -839,3 +839,5 @@ img.logo {
.cursor-move { .cursor-move {
cursor: move !important; cursor: move !important;
} }
@import "./register-layout";