Update/misc UI fixes (#1961)

* fix login error message spacing and ensure not longer than 64 chars

* spinner color to tertiary

* totally responsive homepage cards

* copy changes, back button for marketplace, minor styling

* center setup wizard tiles; adjust external link style

* remove cert note from setup success

* convert launch card to go to login button

* change system settings to system; update icons

* refactor card widget input as full card details; more card resizing for home page

* cleanup

* clean up widget params

* delete contructor

Co-authored-by: Matt Hill <matthewonthemoon@gmail.com>
This commit is contained in:
Lucy C
2022-11-23 06:05:36 -07:00
committed by Aiden McClelland
parent 6eea2526f6
commit f7c5e64fbc
36 changed files with 451 additions and 322 deletions

View File

@@ -49,7 +49,6 @@
[ngModelOptions]="{'standalone': true}"
[type]="!unmasked2 ? 'password' : 'text'"
(ionChange)="checkVer()"
maxlength="64"
placeholder="Retype Password"
></ion-input>
<ion-button

View File

@@ -63,6 +63,8 @@ export class PasswordPage {
if (this.password.length < 12) {
this.pwError = 'Must be 12 characters or greater'
} else if (this.password.length > 64) {
this.pwError = 'Must be less than 65 characters'
} else {
this.pwError = ''
}

View File

@@ -1,6 +1,6 @@
<ion-content>
<ion-grid>
<ion-row>
<ion-row class="ion-align-items-center">
<ion-col>
<ion-card color="dark">
<ion-card-header class="ion-text-center">

View File

@@ -1,6 +1,6 @@
<ion-content>
<ion-grid>
<ion-row>
<ion-row class="ion-align-items-center">
<ion-col class="ion-text-center">
<ion-card color="dark">
<ion-card-header

View File

@@ -1,6 +1,6 @@
<ion-content>
<ion-grid>
<ion-row>
<ion-row class="ion-align-items-center">
<ion-col class="ion-text-center">
<div style="padding-bottom: 32px">
<img
@@ -9,7 +9,6 @@
style="max-width: 220px"
/>
</div>
<ion-card *ngIf="!loading" color="dark">
<ion-card-header>
<ion-button

View File

@@ -1,6 +1,6 @@
<ion-content>
<ion-grid>
<ion-row>
<ion-row class="ion-align-items-center">
<ion-col class="ion-text-center">
<ion-card color="dark">
<ion-card-header>

View File

@@ -1,6 +1,6 @@
<ion-content>
<ion-grid>
<ion-row>
<ion-row class="ion-align-items-center">
<ion-col>
<ion-card color="dark">
<ion-card-header class="ion-text-center">

View File

@@ -1,32 +1,13 @@
<canvas #canvas> Your browser does not support the canvas element. </canvas>
<canvas #canvas>Your browser does not support the canvas element.</canvas>
<ion-content>
<div class="grid-center-wrapper">
<ion-grid [fixed]="true">
<!-- kiosk mode -->
<ng-container *ngIf="isKiosk; else notKiosk">
<ion-card>
<ion-row>
<ion-col size-xs="12" class="ion-text-center">
<div class="inline">
<ion-icon
name="checkmark-circle-outline"
color="success"
></ion-icon>
<h1>Setup Complete!</h1>
</div>
<h3 class="ion-padding-top">
You will be redirected momentarily.
</h3>
</ion-col>
</ion-row>
</ion-card>
</ng-container>
<!-- not kiosk -->
<ng-template #notKiosk>
<ion-card>
<ion-row>
<ion-col size-xs="12" class="ion-text-center">
<div style="margin-bottom: 4rem">
<ion-grid>
<ion-row class="ion-align-items-center">
<ion-col>
<!-- kiosk mode -->
<ng-container *ngIf="isKiosk; else notKiosk">
<ion-card>
<ion-row class="ion-align-items-center">
<ion-col size-xs="12" class="ion-text-center">
<div class="inline">
<ion-icon
name="checkmark-circle-outline"
@@ -34,199 +15,215 @@
></ion-icon>
<h1>Setup Complete!</h1>
</div>
<h3 *ngIf="recoverySource && recoverySource.type === 'backup'">
You can now safely unplug your backup drive
<h3 class="ion-padding-top">
You will be redirected momentarily.
</h3>
<h3 *ngIf="recoverySource && recoverySource.type === 'migrate'">
You can now safely unplug your old drive
</h3>
</div>
<div class="card-container">
<ion-card id="information" (click)="download()">
<ion-card-content>
<ion-card-title
>Download your Embassy's address information for permanent
access</ion-card-title
>
<p>
<code>embassy.local</code> was for setup only. It will no
longer work.
</p>
</ion-card-content>
<ion-footer>
</ion-col>
</ion-row>
</ion-card>
</ng-container>
<!-- not kiosk -->
<ng-template #notKiosk>
<ion-card>
<ion-row class="ion-align-items-center">
<ion-col size-xs="12" class="ion-text-center">
<div style="margin-bottom: 4rem">
<div class="inline">
<ion-icon
name="checkmark-circle-outline"
color="success"
></ion-icon>
<h1>Setup Complete!</h1>
</div>
<h3
*ngIf="recoverySource && recoverySource.type === 'backup'"
>
You can now safely unplug your backup drive
</h3>
<h3
*ngIf="recoverySource && recoverySource.type === 'migrate'"
>
You can now safely unplug your old drive
</h3>
</div>
<div class="card-container">
<ion-card id="information" (click)="download()">
<ion-card-content>
<ion-card-title
>Download permanent address info</ion-card-title
>
<p>
embassy.local was for setup purposes only. It will no
longer work.
</p>
</ion-card-content>
<ion-footer>
<div class="container">
<div class="inline">
<p>Download</p>
<ion-icon name="download-outline"></ion-icon>
</div>
</div>
</ion-footer>
</ion-card>
<ion-card
[disabled]="disableLogin"
id="launch"
href="{{ lanAddress }}"
target="_blank"
>
<div class="container">
<div class="inline">
<p>Download</p>
<ion-icon name="download-outline"></ion-icon>
<p>Go to Embassy login</p>
<ion-icon name="open-outline"></ion-icon>
</div>
</div>
</ion-footer>
</ion-card>
<ion-card id="launch" href="{{ lanAddress }}" target="_blank">
<ion-card-content>
<ion-card-title
>Launch to login to your Embassy</ion-card-title
>
<p class="ion-padding-bottom">
<span class="emphasis-warn">Important!</span><br />
Your browser will warn you that the page is untrusted. You
can safely bypass this warning. It will go away after you
</ion-card>
</div>
</ion-col>
</ion-row>
<!-- cert elem -->
<a hidden id="install-cert" download="embassy.crt"></a>
<!-- download elem -->
<div hidden id="downloadable">
<div
style="
font-family: Montserrat;
color: #333333;
display: flex;
flex-direction: column;
margin: auto;
width: clamp(900px, 35vw, 600px);
"
>
<h1
style="
font-variant-caps: all-small-caps;
text-align: center;
padding: 1rem;
"
>
Embassy Address Info
</h1>
<section
style="
padding: 1rem 3rem 2rem 3rem;
border: solid #c4c4c5 3px;
margin-bottom: 24px;
"
>
<h2 style="font-variant-caps: all-small-caps">
Access from home (LAN)
</h2>
<p>
Visit the address below when you are connected to the same
WiFi or Local Area Network (LAN) as your Embassy:
</p>
<p
style="
padding: 16px;
font-weight: bold;
font-size: 1.1rem;
overflow: auto;
"
>
<code id="lan-addr"></code>
</p>
<div>
<h3 style="color: #f8546a; font-weight: bold">
Important!
</h3>
<p>
Be sure to
<a
href="https://docs.start9.com/latest/user-manual/connecting/connecting-lan"
target="_blank"
rel="noreferrer"
style="
color: #6866cc;
font-weight: bold;
text-decoration: none;
"
>
setup a secure connection </a
>.
follow the instructions
</a>
to establish a secure connection by installing your
Embassy's certificate.
</p>
</ion-card-content>
<ion-footer>
<div class="container">
<div class="inline">
<p>Launch</p>
<ion-icon name="rocket-outline"></ion-icon>
</div>
</div>
</ion-footer>
</ion-card>
</div>
</ion-col>
</ion-row>
<!-- cert elem -->
<a hidden id="install-cert" download="embassy.crt"></a>
<!-- download elem -->
<div hidden id="downloadable">
<div
style="
font-family: Montserrat;
color: #333333;
display: flex;
flex-direction: column;
margin: auto;
width: clamp(900px, 35vw, 600px);
"
>
<h1
style="
font-variant-caps: all-small-caps;
text-align: center;
padding: 1rem;
"
>
Embassy Address Info
</h1>
</div>
<section
style="
padding: 1rem 3rem 2rem 3rem;
border: solid #c4c4c5 3px;
margin-bottom: 24px;
"
>
<h2 style="font-variant-caps: all-small-caps">
Access from home (LAN)
</h2>
<p>
Visit the address below when you are connected to the same
WiFi or Local Area Network (LAN) as your Embassy:
</p>
<p
style="
padding: 16px;
font-weight: bold;
font-size: 1.1rem;
overflow: auto;
"
>
<code id="lan-addr"></code>
</p>
<div>
<h3 style="color: #f8546a; font-weight: bold">Important!</h3>
<p>
Your browser will warn you that the page is untrusted. You
can safely bypass this warning. It will go away after you
<div style="padding: 2rem; text-align: center">
<a
href="https://docs.start9.com/latest/user-manual/connecting/connecting-lan"
target="_blank"
rel="noreferrer"
id="cert"
download="embassy.crt"
style="
color: #6866cc;
font-weight: bold;
display: inline-block;
padding: 1em 1.2em;
box-sizing: border-box;
font-size: 1rem;
text-decoration: none;
text-align: center;
border-radius: clamp(2rem, 3rem, 4rem);
cursor: pointer;
box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px -1px,
rgba(0, 0, 0, 0.06) 0px 2px 4px -1px;
background: #6866cc;
color: #f4f4f5;
"
>
follow the instructions
Download certificate
</a>
to download and trust your Embassy's Root Certificate
Authority.
</p>
</div>
</div>
</section>
<div style="padding: 2rem; text-align: center">
<a
id="cert"
download="embassy.crt"
<section
style="
padding: 1rem 3rem 2rem 3rem;
border: solid #c4c4c5 3px;
"
>
<h2 style="font-variant-caps: all-small-caps">
Access on the go (Tor)
</h2>
<p>Visit the address below when you are away from home:</p>
<p
style="
display: inline-block;
padding: 1em 1.2em;
box-sizing: border-box;
font-size: 1rem;
text-decoration: none;
text-align: center;
border-radius: clamp(2rem, 3rem, 4rem);
cursor: pointer;
box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px -1px,
rgba(0, 0, 0, 0.06) 0px 2px 4px -1px;
background: #6866cc;
color: #f4f4f5;
padding: 16px;
font-weight: bold;
font-size: 1.1rem;
overflow: auto;
"
>
Download Root CA
</a>
</div>
</section>
<section
style="padding: 1rem 3rem 2rem 3rem; border: solid #c4c4c5 3px"
>
<h2 style="font-variant-caps: all-small-caps">
Access on the go (Tor)
</h2>
<p>Visit the address below when you are away from home:</p>
<p
style="
padding: 16px;
font-weight: bold;
font-size: 1.1rem;
overflow: auto;
"
>
<code id="tor-addr"></code>
</p>
<div>
<h3 style="color: #f8546a; font-weight: bold">Important!</h3>
<p>
This address will only work from a Tor-enabled browser.
<a
href="https://docs.start9.com/latest/user-manual/connecting/connecting-tor"
target="_blank"
rel="noreferrer"
style="
color: #6866cc;
font-weight: bold;
text-decoration: none;
"
>
Follow the instructions
</a>
to get setup.
<code id="tor-addr"></code>
</p>
</div>
</section>
<div>
<h3 style="color: #f8546a; font-weight: bold">
Important!
</h3>
<p>
This address will only work from a Tor-enabled browser.
<a
href="https://docs.start9.com/latest/user-manual/connecting/connecting-tor"
target="_blank"
rel="noreferrer"
style="
color: #6866cc;
font-weight: bold;
text-decoration: none;
"
>
Follow the instructions
</a>
to get setup.
</p>
</div>
</section>
</div>
</div>
</div>
</ion-card>
</ng-template>
</ion-grid>
</div>
</ion-card>
</ng-template>
</ion-col>
</ion-row>
</ion-grid>
</ion-content>

View File

@@ -17,9 +17,8 @@ ion-content {
}
ion-grid {
padding-top: 2rem;
max-width: 760px;
margin: auto;
height: 100%;
}
.grid-center-wrapper {
@@ -47,6 +46,7 @@ ion-card {
ion-card {
max-width: 91%;
min-width: 91%;
background: #615F5F;
color: var(--ion-text-color);
box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
@@ -78,14 +78,6 @@ ion-card {
}
}
p {
a {
text-decoration: none;
font-weight: bold;
color: var(--ion-text-color);
}
}
ion-footer {
position: absolute;
bottom: 10px;
@@ -101,12 +93,6 @@ ion-card {
ion-icon {
font-size: 1.6rem;
}
.container {
display: flex;
justify-content: center;
align-items: center;
}
}
.footer-md::before {
@@ -114,21 +100,31 @@ ion-card {
}
}
#launch:after {
content: '';
position: absolute;
left: 0;
top: 80%;
width: 100%;
height: 100%;
.container {
display: flex;
justify-content: center;
align-items: center;
}
#launch {
background: var(--alt-blue);
height: 100%;
.container p {
font-size: 1.4rem !important;
font-weight: bold;
}
ion-icon {
font-size: 1.7rem;
}
}
#information:after {
content: '';
position: absolute;
left: 0;
top: 77%;
top: 80%;
width: 100%;
height: 100%;
background: var(--color-accent);

View File

@@ -42,6 +42,7 @@ export class SuccessPage {
fadeFactor = 0.07
columns: any[] = []
maxStackHeight: any
disableLogin = true
constructor(
@Inject(DOCUMENT) private readonly document: Document,
@@ -119,7 +120,9 @@ export class SuccessPage {
encodeURIComponent(this.cert),
)
let html = this.document.getElementById('downloadable')?.innerHTML || ''
this.downloadHtml.download('embassy-info.html', html)
this.downloadHtml.download('embassy-info.html', html).then(_ => {
this.disableLogin = false
})
}
checkBottom() {

View File

@@ -1,6 +1,6 @@
<ion-content>
<ion-grid>
<ion-row>
<ion-row class="ion-align-items-center">
<ion-col>
<ion-card color="dark">
<ion-card-header class="ion-text-center">

View File

@@ -116,12 +116,12 @@
--color-accent: #6866cc;
--color-dark-black: #121212;
--alt-red: #FF4961;
--alt-orange: #F89248;
--alt-yellow: #E5D53E;
--alt-green: #3DCF6F;
--alt-blue: #00A8A8;
--alt-purple: #9747FF;
--alt-red: #FF4961;
--alt-orange: #F89248;
--alt-yellow: #E5D53E;
--alt-green: #3DCF6F;
--alt-blue: #00A8A8;
--alt-purple: #9747FF;
}
h1,
@@ -177,7 +177,7 @@ ion-grid {
}
ion-row {
height: 100%;
height: 90%;
}
ion-card {
@@ -334,4 +334,11 @@ ion-footer {
ion-item {
margin: 0 0.5rem 2rem 0.5rem;
}
}
p a {
color: var(--ion-text-color);
// text-decoration: none;
font-weight: 600;
text-underline-offset: 0.4rem;
}