Continuing work on login view, still a ways off from completion.

This commit is contained in:
Daniel Scalzi
2018-01-27 22:29:15 -05:00
parent a3e7dfc570
commit 1284c54525
4 changed files with 315 additions and 4 deletions

View File

@@ -11,7 +11,7 @@
background-size: cover;
}
#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>
</head>

View File

@@ -14,6 +14,11 @@
src: url('../fonts/Avenir-Medium.ttf');
}
@font-face {
font-family: 'Ringbearer';
src: url('../fonts/Ringbearer.ttf');
}
/*******************************************************************************
* *
* Element Styles *
@@ -130,6 +135,7 @@ p {
/* Main login container. */
#loginContainer {
position: relative;
display: flex;
justify-content: center;
align-items: center;
@@ -191,6 +197,20 @@ p {
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. */
.loginSVG {
fill: #fff;
@@ -205,7 +225,7 @@ p {
border-width: 1.5px 0px 0px 0px;
border-style: solid;
width: 250px;
margin-bottom: 20px;
/*margin-bottom: 20px;*/
border-color: #fff;
color: rgba(255, 255, 255, 0.75);
font-weight: bold;
@@ -234,6 +254,16 @@ p {
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. */
#loginOptions {
display: flex;
@@ -262,6 +292,10 @@ p {
right: -20px;
transition: 0.5s ease;
}
#loginButton:disabled {
color: rgba(255, 255, 255, 0.75);
pointer-events: none;
}
#loginButton:hover,
#loginButton:focus {
text-shadow: 0px 0px 20px #fff;
@@ -296,6 +330,112 @@ p {
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. */
#loginDisclaimer {
display: flex;
@@ -361,6 +501,9 @@ p {
color: #8d8d8d;
border-color: #8d8d8d;
}
#checkmarkContainer[disabled] {
pointer-events: none;
}
/* For checked -> #checkmarkContainer input:checked ~ * */
/* Create the checkmark/indicator (hidden when not checked). */
.loginCheckmark:after {
@@ -383,6 +526,129 @@ p {
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 {
height: calc(100% - 22px);

View File

@@ -9,12 +9,14 @@
</g>
</svg>
<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">
<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"/>
</g>
</svg>
<input id="loginPassword" class="loginField" type="password" placeholder="PASSWORD"/>
<span class="loginErrorSpan">* Required</span>
<div id="loginOptions">
<span class="loginSpanDim">
<a href="https://help.mojang.com/customer/en/portal/articles/329524-change-or-forgot-password">forgot password?</a>
@@ -34,6 +36,10 @@
</defs>
<polyline class="arrowLine" points="0.71 13.26 12.56 1.41 24.16 13.02"/>
</svg>
<div class="circle-loader">
<div class="checkmark draw"></div>
</div>
<!--<div class="spinningCircle" id="loginSpinner"></div>-->
</div>
</button>
<div id="loginDisclaimer">
@@ -45,4 +51,43 @@
</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>