mirror of
https://github.com/dscalzi/HeliosLauncher.git
synced 2024-12-22 11:42:14 -08:00
Continuing work on login view, still a ways off from completion.
This commit is contained in:
parent
a3e7dfc570
commit
1284c54525
@ -75,10 +75,10 @@ You can find more information [here](http://code.matsu.io/1).
|
|||||||
|
|
||||||
### Notes on DevTools Window ###
|
### Notes on DevTools Window ###
|
||||||
|
|
||||||
Once you run the program, you can open the DevTools window by typing the following keys in sequence on the main window.
|
Once you run the program, you can open the DevTools window by using the following keybind.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
wcdev
|
ctrl + shift + i
|
||||||
```
|
```
|
||||||
|
|
||||||
Please note that if you are debugging the application with VS Code and have launched the program using the **Debug Renderer Process** configuration you cannot open the DevTools window. If you attempt to do so, the program will crash. Remote debugging cannot be done with multiple DevTools clients.
|
Please note that if you are debugging the application with VS Code and have launched the program using the **Debug Renderer Process** configuration you cannot open the DevTools window. If you attempt to do so, the program will crash. Remote debugging cannot be done with multiple DevTools clients.
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
#main {
|
#main {
|
||||||
background: linear-gradient(to top, rgba(0, 0, 0, 0.75) 0%, rgba(0, 0, 0, 0) 50%);
|
background: linear-gradient(to top, rgba(0, 0, 0, 0.75) 0%, rgba(0, 0, 0, 0) 100%);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
@ -14,6 +14,11 @@
|
|||||||
src: url('../fonts/Avenir-Medium.ttf');
|
src: url('../fonts/Avenir-Medium.ttf');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Ringbearer';
|
||||||
|
src: url('../fonts/Ringbearer.ttf');
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* *
|
* *
|
||||||
* Element Styles *
|
* Element Styles *
|
||||||
@ -130,6 +135,7 @@ p {
|
|||||||
|
|
||||||
/* Main login container. */
|
/* Main login container. */
|
||||||
#loginContainer {
|
#loginContainer {
|
||||||
|
position: relative;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@ -191,6 +197,20 @@ p {
|
|||||||
letter-spacing: 1px;
|
letter-spacing: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Div to display any login errors. */
|
||||||
|
#loginError {
|
||||||
|
font-family: 'Avenir Book';
|
||||||
|
color: #fff;
|
||||||
|
font-size: 12px;
|
||||||
|
background: #9b1313;
|
||||||
|
border: 0.5px solid white;
|
||||||
|
padding: 2px 0px;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
font-weight: bold;
|
||||||
|
margin: 8px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
/* SVG icons on the login view. */
|
/* SVG icons on the login view. */
|
||||||
.loginSVG {
|
.loginSVG {
|
||||||
fill: #fff;
|
fill: #fff;
|
||||||
@ -205,7 +225,7 @@ p {
|
|||||||
border-width: 1.5px 0px 0px 0px;
|
border-width: 1.5px 0px 0px 0px;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
width: 250px;
|
width: 250px;
|
||||||
margin-bottom: 20px;
|
/*margin-bottom: 20px;*/
|
||||||
border-color: #fff;
|
border-color: #fff;
|
||||||
color: rgba(255, 255, 255, 0.75);
|
color: rgba(255, 255, 255, 0.75);
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
@ -234,6 +254,16 @@ p {
|
|||||||
margin-bottom: 13px;
|
margin-bottom: 13px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.loginErrorSpan {
|
||||||
|
font-family: 'Avenir Medium';
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 8px;
|
||||||
|
color: red;
|
||||||
|
width: 100%;
|
||||||
|
text-align: right;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
/* Container which contains the forgot and remember options. */
|
/* Container which contains the forgot and remember options. */
|
||||||
#loginOptions {
|
#loginOptions {
|
||||||
display: flex;
|
display: flex;
|
||||||
@ -262,6 +292,10 @@ p {
|
|||||||
right: -20px;
|
right: -20px;
|
||||||
transition: 0.5s ease;
|
transition: 0.5s ease;
|
||||||
}
|
}
|
||||||
|
#loginButton:disabled {
|
||||||
|
color: rgba(255, 255, 255, 0.75);
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
#loginButton:hover,
|
#loginButton:hover,
|
||||||
#loginButton:focus {
|
#loginButton:focus {
|
||||||
text-shadow: 0px 0px 20px #fff;
|
text-shadow: 0px 0px 20px #fff;
|
||||||
@ -296,6 +330,112 @@ p {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#loginButton .circle-loader,
|
||||||
|
#loginButton:disabled #loginSVG {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#loginButton:disabled .circle-loader,
|
||||||
|
#loginButton #loginSVG {
|
||||||
|
display: initial;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.circle-loader {
|
||||||
|
margin-left: 20px;
|
||||||
|
border: 2px solid rgba(255, 255, 255, 0.5);
|
||||||
|
border-left-color: #ffffff;
|
||||||
|
animation-name: loader-spin;
|
||||||
|
animation-duration: 1s;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
border-radius: 50%;
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
}
|
||||||
|
.load-complete {
|
||||||
|
animation: none;
|
||||||
|
border-color: #ffffff;
|
||||||
|
transition: border 500ms ease-out;
|
||||||
|
}
|
||||||
|
.checkmark {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.checkmark.draw:after {
|
||||||
|
animation-duration: 800ms;
|
||||||
|
animation-timing-function: ease;
|
||||||
|
animation-name: checkmark;
|
||||||
|
transform: scaleX(-1) rotate(135deg);
|
||||||
|
}
|
||||||
|
.checkmark:after {
|
||||||
|
opacity: 1;
|
||||||
|
height: 8px;
|
||||||
|
width: 4px;
|
||||||
|
transform-origin: left top;
|
||||||
|
border-right: 2px solid #ffffff;
|
||||||
|
border-top: 2px solid #ffffff;
|
||||||
|
content: '';
|
||||||
|
left: 2px;
|
||||||
|
top: 8px;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
@keyframes loader-spin {
|
||||||
|
0% {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes checkmark {
|
||||||
|
0% {
|
||||||
|
height: 0;
|
||||||
|
width: 0;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
20% {
|
||||||
|
height: 0;
|
||||||
|
width: 4px;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
40% {
|
||||||
|
height: 8px;
|
||||||
|
width: 4px;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
height: 8px;
|
||||||
|
width: 4px;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*.spinningCircle {
|
||||||
|
margin-left: 20px;
|
||||||
|
height: 16px;
|
||||||
|
width: 16px;
|
||||||
|
border-radius: 50%;
|
||||||
|
border: 2px solid rgba(255,255,255,0);
|
||||||
|
border-top-color: #ffffff;
|
||||||
|
border-right-color: #ffffff;
|
||||||
|
border-left-color: rgba(255, 255, 255, 0.50);
|
||||||
|
border-bottom-color: rgba(255, 255, 255, 0.50);
|
||||||
|
animation: single2 4s infinite linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes single2 {
|
||||||
|
0% {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: rotate(720deg);
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
/* Disclaimer container. */
|
/* Disclaimer container. */
|
||||||
#loginDisclaimer {
|
#loginDisclaimer {
|
||||||
display: flex;
|
display: flex;
|
||||||
@ -361,6 +501,9 @@ p {
|
|||||||
color: #8d8d8d;
|
color: #8d8d8d;
|
||||||
border-color: #8d8d8d;
|
border-color: #8d8d8d;
|
||||||
}
|
}
|
||||||
|
#checkmarkContainer[disabled] {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
/* For checked -> #checkmarkContainer input:checked ~ * */
|
/* For checked -> #checkmarkContainer input:checked ~ * */
|
||||||
/* Create the checkmark/indicator (hidden when not checked). */
|
/* Create the checkmark/indicator (hidden when not checked). */
|
||||||
.loginCheckmark:after {
|
.loginCheckmark:after {
|
||||||
@ -383,6 +526,129 @@ p {
|
|||||||
transform: rotate(45deg);
|
transform: rotate(45deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* * *
|
||||||
|
* Login View | Error Overlay
|
||||||
|
* * */
|
||||||
|
|
||||||
|
#loginErrorContainer {
|
||||||
|
position: absolute;
|
||||||
|
display: none;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: rgba(0, 0, 0, 0.50);
|
||||||
|
}
|
||||||
|
|
||||||
|
#loginContainer[error] > #loginErrorContainer {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
#loginContainer[error] > div:not(#loginErrorContainer) {
|
||||||
|
filter: blur(3px) contrast(0.9) brightness(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#loginErrorContent {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
width: 300px;
|
||||||
|
height: 35%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 15px 0px;
|
||||||
|
/* background-color: #424242; */
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#loginErrorTitle {
|
||||||
|
font-family: 'Avenir Medium';
|
||||||
|
font-size: 20px;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: bold;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#loginErrorDesc {
|
||||||
|
font-family: 'Avenir Book';
|
||||||
|
font-size: 12px;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#loginErrorAcknowledge {
|
||||||
|
background: none;
|
||||||
|
border: 1px solid #ffffff;
|
||||||
|
color: white;
|
||||||
|
font-family: 'Avenir Medium';
|
||||||
|
font-weight: bold;
|
||||||
|
border-radius: 2px;
|
||||||
|
width: 75px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* * *
|
||||||
|
* Login View | Loader
|
||||||
|
* * */
|
||||||
|
/* Will reuse this elsewhere down the line.
|
||||||
|
#loginLoading {
|
||||||
|
position: absolute;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: rgba(0, 0, 0, 0.80);
|
||||||
|
}
|
||||||
|
|
||||||
|
#loginLoadingContent {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#loadSpinnerContainer {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#loadCenterImage {
|
||||||
|
position: absolute;
|
||||||
|
width: 200px;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#loadSpinnerImage {
|
||||||
|
width: 280px;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#loadDescText {
|
||||||
|
color: #f1eada;
|
||||||
|
font-family: 'Avenir Medium';
|
||||||
|
font-weight: bold;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes rotating {
|
||||||
|
from {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.rotating {
|
||||||
|
animation: rotating 10s linear infinite;
|
||||||
|
}*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#login_filter {
|
#login_filter {
|
||||||
height: calc(100% - 22px);
|
height: calc(100% - 22px);
|
||||||
|
@ -9,12 +9,14 @@
|
|||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
<input id="loginUsername" class="loginField" type="text" placeholder="EMAIL"/>
|
<input id="loginUsername" class="loginField" type="text" placeholder="EMAIL"/>
|
||||||
|
<span class="loginErrorSpan">* Invalid Username</span>
|
||||||
<svg id="lockSVG" class="loginSVG" viewBox="40 32 60.36 70.43">
|
<svg id="lockSVG" class="loginSVG" viewBox="40 32 60.36 70.43">
|
||||||
<g>
|
<g>
|
||||||
<path d="M86.16,54a16.38,16.38,0,1,0-32,0H44V102.7H96V54Zm-25.9-3.39a9.89,9.89,0,1,1,19.77,0A9.78,9.78,0,0,1,79.39,54H60.89A9.78,9.78,0,0,1,60.26,50.59ZM70,96.2a6.5,6.5,0,0,1-6.5-6.5,6.39,6.39,0,0,1,3.1-5.4V67h6.5V84.11a6.42,6.42,0,0,1,3.39,5.6A6.5,6.5,0,0,1,70,96.2Z"/>
|
<path d="M86.16,54a16.38,16.38,0,1,0-32,0H44V102.7H96V54Zm-25.9-3.39a9.89,9.89,0,1,1,19.77,0A9.78,9.78,0,0,1,79.39,54H60.89A9.78,9.78,0,0,1,60.26,50.59ZM70,96.2a6.5,6.5,0,0,1-6.5-6.5,6.39,6.39,0,0,1,3.1-5.4V67h6.5V84.11a6.42,6.42,0,0,1,3.39,5.6A6.5,6.5,0,0,1,70,96.2Z"/>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
<input id="loginPassword" class="loginField" type="password" placeholder="PASSWORD"/>
|
<input id="loginPassword" class="loginField" type="password" placeholder="PASSWORD"/>
|
||||||
|
<span class="loginErrorSpan">* Required</span>
|
||||||
<div id="loginOptions">
|
<div id="loginOptions">
|
||||||
<span class="loginSpanDim">
|
<span class="loginSpanDim">
|
||||||
<a href="https://help.mojang.com/customer/en/portal/articles/329524-change-or-forgot-password">forgot password?</a>
|
<a href="https://help.mojang.com/customer/en/portal/articles/329524-change-or-forgot-password">forgot password?</a>
|
||||||
@ -34,6 +36,10 @@
|
|||||||
</defs>
|
</defs>
|
||||||
<polyline class="arrowLine" points="0.71 13.26 12.56 1.41 24.16 13.02"/>
|
<polyline class="arrowLine" points="0.71 13.26 12.56 1.41 24.16 13.02"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
<div class="circle-loader">
|
||||||
|
<div class="checkmark draw"></div>
|
||||||
|
</div>
|
||||||
|
<!--<div class="spinningCircle" id="loginSpinner"></div>-->
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
<div id="loginDisclaimer">
|
<div id="loginDisclaimer">
|
||||||
@ -45,4 +51,43 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
//const validEmail = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i
|
||||||
|
const loginUsername = document.getElementById('loginUsername')
|
||||||
|
const loginPassword = document.getElementById('loginPassword')
|
||||||
|
const checkmarkContainer = document.getElementById('checkmarkContainer')
|
||||||
|
const loginRememberOption = document.getElementById('loginRememberOption')
|
||||||
|
const loginButton = document.getElementById('loginButton')
|
||||||
|
loginButton.addEventListener('click', () => {
|
||||||
|
loginButton.disabled = true
|
||||||
|
loginUsername.disabled = true
|
||||||
|
loginPassword.disabled = true
|
||||||
|
checkmarkContainer.setAttribute('disabled', true)
|
||||||
|
loginRememberOption.disabled = true
|
||||||
|
loginButton.innerHTML = loginButton.innerHTML.replace('LOGIN', 'LOGGING IN')
|
||||||
|
setTimeout(() => {
|
||||||
|
loginButton.innerHTML = loginButton.innerHTML.replace('LOGGING IN', 'SUCCESS')
|
||||||
|
loginButton.style.color = '#ffffff'
|
||||||
|
$('.circle-loader').toggleClass('load-complete');
|
||||||
|
$('.checkmark').toggle();
|
||||||
|
}, 2500)
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
<div id="loginErrorContainer">
|
||||||
|
<div id="loginErrorContent">
|
||||||
|
<span id="loginErrorTitle">LOGIN FAILED:<br>INVALID CREDENTIALS</span>
|
||||||
|
<span id="loginErrorDesc">Either the email or password you supplied is invalid. Please ensure everything is correct and try again.</span>
|
||||||
|
<button id="loginErrorAcknowledge">Try Again</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Will reuse this down the line, then it will be removed from this file. -->
|
||||||
|
<!--<div id="loginLoading">
|
||||||
|
<div id="loginLoadingContent">
|
||||||
|
<div id="loadSpinnerContainer">
|
||||||
|
<img id="loadCenterImage" src="assets/images/westeroscraftlogo1.png">
|
||||||
|
<img id="loadSpinnerImage" class="rotating" src="assets/images/westeroscraftlogo2.png">
|
||||||
|
</div>
|
||||||
|
<span id="loadDescText">LOGGING IN</span>
|
||||||
|
</div>
|
||||||
|
</div>-->
|
||||||
</div>
|
</div>
|
Loading…
Reference in New Issue
Block a user