diff --git a/README.md b/README.md index f79ccc81..4cb46375 100644 --- a/README.md +++ b/README.md @@ -75,10 +75,10 @@ You can find more information [here](http://code.matsu.io/1). ### 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 -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. diff --git a/app/app.ejs b/app/app.ejs index 17ca200b..cf42b38f 100644 --- a/app/app.ejs +++ b/app/app.ejs @@ -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%); } diff --git a/app/assets/css/launcher.css b/app/assets/css/launcher.css index b505c95d..7b451c2c 100644 --- a/app/assets/css/launcher.css +++ b/app/assets/css/launcher.css @@ -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); diff --git a/app/login.ejs b/app/login.ejs index 8cdb5d2a..e900e020 100644 --- a/app/login.ejs +++ b/app/login.ejs @@ -9,12 +9,14 @@ + * Invalid Username + * Required