diff --git a/404.html b/404.html index 15df4cb62e8c2b71282ebd31f380db8a337126a6..37b3bbae567ded0704bda04141471c220d2756ad 100644 --- a/404.html +++ b/404.html @@ -3,56 +3,52 @@ <head> <meta charset="UTF-8"> <title>404 - Page not found</title> - <link href="/css/404.css" rel="stylesheet"> + <link href="/css/error.css" rel="stylesheet"> + <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> + <script src="https://www.mattboldt.com/demos/typed-js/js/typed.custom.js"></script> </head> <body> <!-- Matomo Image Tracker--> <img src="https://matomo.jonasled.de/matomo.php?idsite=1&rec=1" style="border:0" alt="" /> <!-- End Matomo --> -<div class="moon"></div> -<div class="moon__crater moon__crater1"></div> -<div class="moon__crater moon__crater2"></div> -<div class="moon__crater moon__crater3"></div> - -<div class="star star1"></div> -<div class="star star2"></div> -<div class="star star3"></div> -<div class="star star4"></div> -<div class="star star5"></div> - -<div class="error"> - <div class="error__title">404</div> - <div class="error__subtitle">Hmmm...</div> - <div class="error__description">It looks like one of the developers fell asleep</div> +<div id="particles-js"></div> +<div class="terminal-window"> + <header> + <div class="button green"></div> + <div class="button yellow"></div> + <div class="button red"></div> + </header> + <section class="terminal"> + <div class="history"></div> + $ <span class="prompt"></span> + <span class="typed-cursor"></span> + </section> </div> - -<div class="astronaut"> - <div class="astronaut__backpack"></div> - <div class="astronaut__body"></div> - <div class="astronaut__body__chest"></div> - <div class="astronaut__arm-left1"></div> - <div class="astronaut__arm-left2"></div> - <div class="astronaut__arm-right1"></div> - <div class="astronaut__arm-right2"></div> - <div class="astronaut__arm-thumb-left"></div> - <div class="astronaut__arm-thumb-right"></div> - <div class="astronaut__leg-left"></div> - <div class="astronaut__leg-right"></div> - <div class="astronaut__foot-left"></div> - <div class="astronaut__foot-right"></div> - <div class="astronaut__wrist-left"></div> - <div class="astronaut__wrist-right"></div> - - <div class="astronaut__cord"> - <canvas id="cord" height="500px" width="500px"></canvas> - </div> - - <div class="astronaut__head"> - <canvas id="visor" width="60px" height="60px"></canvas> - <div class="astronaut__head-visor-flare1"></div> - <div class="astronaut__head-visor-flare2"></div> - </div> +<!-- data --> +<div class="terminal-data mimik-run-output"> </div> -<script src="/js/404.js"></script> +<script> + var data = [ + { + action: 'type', + strings: ["Accessing files.."], + output: 'grabbing files..<br><br>', + postDelay: 1000 + }, + { + action: 'type', + strings: ["404 File not found"], + output: '<span class="gray">It looks like you want to access a file that\'s not available</><br> ', + postDelay: 1000 + }, + { + action: 'type', + strings: ["These are not the error codes you're looking for.", 'Please either report this error to an administrator or return back and forget you were here...'], + postDelay: 2000 + } + + ]; +</script> +<script src="/js/error.js"></script> </body> </html> \ No newline at end of file diff --git a/css/error.css b/css/error.css index cc8912f0f61434c3f722e1c2012050bed60701c4..3e24e1c1825f6646f9e832582ab892eda72b6c40 100644 --- a/css/error.css +++ b/css/error.css @@ -1,642 +1,172 @@ -html, -body { - height: 100%; - width: 100%; - margin: 0; - background: linear-gradient(90deg, rgba(47,54,64,1) 23%, rgba(24,27,32,1) 100%); -} - -.moon { - background: linear-gradient(90deg, rgba(208,208,208,1) 48%, rgba(145,145,145,1) 100%); - position: absolute; - top: -100px; - left: -300px; - width: 900px; - height: 900px; - content: ''; - border-radius: 100%; - box-shadow: 0 0 30px -4px rgba(0,0,0,0.5); -} - -.moon__crater { - position: absolute; - content: ''; - border-radius: 100%; - background: linear-gradient(90deg, rgba(122,122,122,1) 38%, rgba(195,195,195,1) 100%); - opacity: 0.6; -} - -.moon__crater1 { - top: 250px; - left: 500px; - width: 60px; - height: 180px; -} - -.moon__crater2 { - top: 650px; - left: 340px; - width: 40px; - height: 80px; - transform: rotate(55deg); -} - -.moon__crater3 { - top: -20px; - left: 40px; - width: 65px; - height: 120px; - transform: rotate(250deg); -} - -.star { - background: grey; - position: absolute; - width: 5px; - height: 5px; - content: ''; - border-radius: 100%; - transform: rotate(250deg); - opacity: 0.4; - animation-name: shimmer; - animation-duration: 1.5s; - animation-iteration-count: infinite; - animation-direction: alternate; -} - -@keyframes shimmer { - from {opacity: 0;} - to {opacity: 0.7;} -} - -.star1 { - top: 40%; - left: 50%; - animation-delay: 1s; -} - -.star2 { - top: 60%; - left: 90%; - animation-delay: 3s; -} - -.star3 { - top: 10%; - left: 70%; - animation-delay: 2s; -} - -.star4 { - top: 90%; - left: 40%; -} - -.star5 { - top: 20%; - left: 30%; - animation-delay: 0.5s; -} - -.error { - position: absolute; - left: 100px; - top: 400px; - transform: translateY(-60%); - font-family: 'Righteous', cursive; - color: #363e49; -} - -.error__title { - font-size: 10em; -} - -.error__subtitle { - font-size: 2em; -} - -.error__description { - opacity: 0.5; -} - -.astronaut { - position: absolute; - width: 185px; - height: 300px; - left: 70%; - top: 50%; - transform: translate(-50%, -50%) rotate(20deg) scale(1.2); -} - -.astronaut__head { - background-color: white; - position: absolute; - top: 60px; - left: 60px; - width: 60px; - height: 60px; - content: ''; - border-radius: 2em; -} - -.astronaut__head-visor-flare1 { - background-color: #7f8fa6; - position: absolute; - top: 28px; - left: 40px; - width: 10px; - height: 10px; - content: ''; - border-radius: 2em; - opacity: 0.5; -} - -.astronaut__head-visor-flare2 { - background-color: #718093; - position: absolute; - top: 40px; - left: 38px; - width: 5px; - height: 5px; - content: ''; - border-radius: 2em; - opacity: 0.3; -} - -.astronaut__backpack { - background-color: #bfbfbf; - position: absolute; - top: 90px; - left: 47px; - width: 86px; - height: 90px; - content: ''; - border-radius: 8px; -} - -.astronaut__body { - background-color: #e6e6e6; - position: absolute; - top: 115px; - left: 55px; - width: 70px; - height: 80px; - content: ''; - border-radius: 8px; -} - -.astronaut__body__chest { - background-color: #d9d9d9; - position: absolute; - top: 140px; - left: 68px; - width: 45px; - height: 25px; - content: ''; - border-radius: 6px; -} - -.astronaut__arm-left1 { - background-color: #e6e6e6; - position: absolute; - top: 127px; - left: 9px; - width: 65px; - height: 20px; - content: ''; - border-radius: 8px; - transform: rotate(-30deg); -} - -.astronaut__arm-left2 { - background-color: #e6e6e6; - position: absolute; - top: 102px; - left: 7px; - width: 20px; - height: 45px; - content: ''; - transform: rotate(-12deg); - border-radius: 8em 8em 8px 8px; -} - -.astronaut__arm-right1 { - background-color: #e6e6e6; - position: absolute; - top: 113px; - left: 100px; - width: 65px; - height: 20px; - content: ''; - border-radius: 8px; - transform: rotate(-10deg); -} - -.astronaut__arm-right2 { - background-color: #e6e6e6; - position: absolute; - top: 78px; - left: 141px; - width: 20px; - height: 45px; - content: ''; - transform: rotate(-10deg); - border-radius: 8em 8em 8px 8px; -} - -.astronaut__arm-thumb-left { - background-color: #e6e6e6; - position: absolute; - top: 110px; - left: 21px; - width: 10px; - height: 6px; - content: ''; - border-radius: 8em; - transform: rotate(-35deg); -} - -.astronaut__arm-thumb-right { - background-color: #e6e6e6; - position: absolute; - top: 90px; - left: 133px; - width: 10px; - height: 6px; - content: ''; - border-radius: 8em; - transform: rotate(20deg); -} - -.astronaut__wrist-left { - background-color: #e67e22; - position: absolute; - top: 122px; - left: 7px; - width: 21px; - height: 4px; - content: ''; - border-radius: 8em; - transform: rotate(-15deg); -} - -.astronaut__wrist-right { - background-color: #e67e22; - position: absolute; - top: 98px; - left: 141px; - width: 21px; - height: 4px; - content: ''; - border-radius: 8em; - transform: rotate(-10deg); -} - -.astronaut__leg-left { - background-color: #e6e6e6; - position: absolute; - top: 188px; - left: 50px; - width: 23px; - height: 75px; - content: ''; - transform: rotate(10deg); -} - -.astronaut__leg-right { - background-color: #e6e6e6; +#particles-js { position: absolute; - top: 188px; - left: 108px; - width: 23px; - height: 75px; - content: ''; - transform: rotate(-10deg); -} - -html, -body { - height: 100%; width: 100%; - margin: 0; - background: linear-gradient(90deg, rgba(47,54,64,1) 23%, rgba(24,27,32,1) 100%); -} - -.moon { - background: linear-gradient(90deg, rgba(208,208,208,1) 48%, rgba(145,145,145,1) 100%); - position: absolute; - top: -100px; - left: -300px; - width: 900px; - height: 900px; - content: ''; - border-radius: 100%; - box-shadow: 0 0 30px -4px rgba(0,0,0,0.5); -} - -.moon__crater { - position: absolute; - content: ''; - border-radius: 100%; - background: linear-gradient(90deg, rgba(122,122,122,1) 38%, rgba(195,195,195,1) 100%); - opacity: 0.6; -} - -.moon__crater1 { - top: 250px; - left: 500px; - width: 60px; - height: 180px; -} - -.moon__crater2 { - top: 650px; - left: 340px; - width: 40px; - height: 80px; - transform: rotate(55deg); -} - -.moon__crater3 { - top: -20px; - left: 40px; - width: 65px; - height: 120px; - transform: rotate(250deg); -} - -@keyframes shimmer { - from {opacity: 0;} - to {opacity: 0.7;} -} - -.star1 { - top: 40%; - left: 50%; - animation-delay: 1s; -} - -.star2 { - top: 60%; - left: 90%; - animation-delay: 3s; -} - -.star3 { - top: 10%; - left: 70%; - animation-delay: 2s; -} - -.star4 { - top: 90%; - left: 40%; -} - -.star5 { - top: 20%; - left: 30%; - animation-delay: 0.5s; -} - -.error { - position: absolute; - left: 100px; - top: 400px; - transform: translateY(-60%); - font-family: 'Righteous', cursive; - color: #363e49; -} - -.error__title { - font-size: 10em; -} - -.error__subtitle { - font-size: 2em; -} - -.error__description { - opacity: 0.5; -} - -.astronaut { - position: absolute; - width: 185px; - height: 300px; - left: 70%; - top: 50%; - transform: translate(-50%, -50%) rotate(20deg) scale(1.2); -} - -.astronaut__head { - background-color: white; - position: absolute; - top: 60px; - left: 60px; - width: 60px; - height: 60px; - content: ''; - border-radius: 2em; -} - -.astronaut__head-visor-flare1 { - background-color: #7f8fa6; - position: absolute; - top: 28px; - left: 40px; - width: 10px; - height: 10px; - content: ''; - border-radius: 2em; - opacity: 0.5; -} - -.astronaut__head-visor-flare2 { - background-color: #718093; - position: absolute; - top: 40px; - left: 38px; - width: 5px; - height: 5px; - content: ''; - border-radius: 2em; - opacity: 0.3; -} - -.astronaut__backpack { - background-color: #bfbfbf; - position: absolute; - top: 90px; - left: 47px; - width: 86px; - height: 90px; - content: ''; - border-radius: 8px; -} - -.astronaut__body { - background-color: #e6e6e6; - position: absolute; - top: 115px; - left: 55px; - width: 70px; - height: 80px; - content: ''; - border-radius: 8px; -} - -.astronaut__body__chest { - background-color: #d9d9d9; - position: absolute; - top: 140px; - left: 68px; - width: 45px; - height: 25px; - content: ''; - border-radius: 6px; -} - -.astronaut__arm-left1 { - background-color: #e6e6e6; - position: absolute; - top: 127px; - left: 9px; - width: 65px; - height: 20px; - content: ''; - border-radius: 8px; - transform: rotate(-30deg); -} - -.astronaut__arm-left2 { - background-color: #e6e6e6; - position: absolute; - top: 102px; - left: 7px; - width: 20px; - height: 45px; - content: ''; - transform: rotate(-12deg); - border-radius: 8em 8em 8px 8px; -} - -.astronaut__arm-right1 { - background-color: #e6e6e6; - position: absolute; - top: 113px; - left: 100px; - width: 65px; - height: 20px; - content: ''; - border-radius: 8px; - transform: rotate(-10deg); -} - -.astronaut__arm-right2 { - background-color: #e6e6e6; - position: absolute; - top: 78px; - left: 141px; - width: 20px; - height: 45px; - content: ''; - transform: rotate(-10deg); - border-radius: 8em 8em 8px 8px; + height: 100%; } -.astronaut__arm-thumb-left { - background-color: #e6e6e6; - position: absolute; - top: 110px; - left: 21px; - width: 10px; - height: 6px; - content: ''; - border-radius: 8em; - transform: rotate(-35deg); +body { + background: #97cfca; + overflow: hidden; } -.astronaut__arm-thumb-right { - background-color: #e6e6e6; - position: absolute; - top: 90px; - left: 133px; - width: 10px; - height: 6px; - content: ''; - border-radius: 8em; - transform: rotate(20deg); +.terminal-window { + text-align: left; + width: 37.5rem; + height: 22.5rem; + border-radius: .625rem; + margin: auto; + position: relative; + top: 10.5rem; } -.astronaut__wrist-left { - background-color: #e67e22; - position: absolute; - top: 122px; - left: 7px; - width: 21px; - height: 4px; - content: ''; - border-radius: 8em; - transform: rotate(-15deg); +.terminal-window header { + background: #E0E8F0; + height: 1.875rem; + border-radius: .5rem .5rem 0 0; + padding-left: .625rem; } -.astronaut__wrist-right { - background-color: #e67e22; - position: absolute; - top: 98px; - left: 141px; - width: 21px; - height: 4px; - content: ''; - border-radius: 8em; - transform: rotate(-10deg); +.terminal-window header .button { + width: .75rem; + height: .75rem; + margin: .625rem .25rem 0 0; + display: inline-block; + border-radius: .5rem; } -.astronaut__leg-left { - background-color: #e6e6e6; - position: absolute; - top: 188px; - left: 50px; - width: 23px; - height: 75px; - content: ''; - transform: rotate(10deg); +.terminal-window header .button.green { + background: #3BB662; } -.astronaut__leg-right { - background-color: #e6e6e6; - position: absolute; - top: 188px; - left: 108px; - width: 23px; - height: 75px; - content: ''; - transform: rotate(-10deg); +.terminal-window header .button.yellow { + background: #E5C30F; } -.astronaut__foot-left { - background-color: white; - position: absolute; - top: 240px; - left: 43px; - width: 28px; - height: 20px; - content: ''; - transform: rotate(10deg); - border-radius: 8em 8em 3px 3px; - border-bottom: 4px solid #e67e22; +.terminal-window header .button.red { + background: #E75448; } -.astronaut__foot-right { - background-color: white; +.terminal-window section.terminal { + color: white; + font-family: Menlo, Monaco, "Consolas", "Courier New", "Courier"; + font-size: 11pt; + background: #30353A; + padding: .625rem; + box-sizing: border-box; position: absolute; - top: 240px; - left: 111px; - width: 28px; - height: 20px; - content: ''; - transform: rotate(-10deg); - border-radius: 8em 8em 3px 3px; - border-bottom: 4px solid #e67e22; -} + width: 100%; + top: 1.875rem; + bottom: 0; + overflow: auto; +} + +.terminal-window section.terminal .typed-cursor { + opacity: 1; + -webkit-animation: blink 0.7s infinite; + -moz-animation: blink 0.7s infinite; + animation: blink 0.7s infinite; +} +@keyframes blink{ + 0% { opacity:1; } + 50% { opacity:0; } + 100% { opacity:1; } +} +@-webkit-keyframes blink{ + 0% { opacity:1; } + 50% { opacity:0; } + 100% { opacity:1; } +} +@-moz-keyframes blink{ + 0% { opacity:1; } + 50% { opacity:0; } + 100% { opacity:1; } +} + +.terminal-data { display: none; } +.terminal-window .gray { color: gray; } +.terminal-window .green { color: green;} + +/*Media for mobile responsive viewing*/ +@media only screen and (max-width: 600px) { + .terminal-window { + text-align: left; + width: 37.5vmin; + height: 22.5vmin; + border-radius: .625vmin; + margin: auto; + position: relative; + top: 30.5vmin; + } +} +@media only screen and (max-width: 600px) { + .terminal-window header { + background: #E0E8F0; + height: 1.875vmin; + border-radius: .5vmin .5vmin 0 0; + padding-left: 1vmin; + } +} +@media only screen and (max-width: 600px) { + .terminal-window header .button { + width: .75vmin; + height: .75vmin; + margin: .625vmin .25vmin 0 0; + display: inline-block; + border-radius: .5vmin; + } +} +@media only screen and (max-width: 600px) { + .terminal-window header .button.green { + background: #3BB662; + } +} +@media only screen and (max-width: 600px) { + .terminal-window header .button.yellow { + background: #E5C30F; + } +} +@media only screen and (max-width: 600px) { + .terminal-window header .button.red { + background: #E75448; + } +} +@media only screen and (max-width: 600px) { + .terminal-window section.terminal { + color: white; + font-family: Menlo, Monaco, "Consolas", "Courier New", "Courier"; + font-size: .6875vmin; + background: #30353A; + padding: .625vmin; + box-sizing: border-box; + position: absolute; + width: 100%; + top: 1.875vmin; + bottom: 0; + overflow: auto; + } +} +.terminal-window section.terminal .typed-cursor { + opacity: 1; + -webkit-animation: blink 0.7s infinite; + -moz-animation: blink 0.7s infinite; + animation: blink 0.7s infinite; +} +@keyframes blink{ + 0% { opacity:1; } + 50% { opacity:0; } + 100% { opacity:1; } +} +@-webkit-keyframes blink{ + 0% { opacity:1; } + 50% { opacity:0; } + 100% { opacity:1; } +} +@-moz-keyframes blink{ + 0% { opacity:1; } + 50% { opacity:0; } + 100% { opacity:1; } +} + +.terminal-data { display: none; } +.terminal-window .gray { color: gray; } +.terminal-window .green { color: green;} \ No newline at end of file diff --git a/js/error.js b/js/error.js index 80f1cae31617f9722824777e624d36129e7f61f6..81131a90313ac7df5d20bd0769b16a47bc2b4389 100644 --- a/js/error.js +++ b/js/error.js @@ -1,77 +1,44 @@ -function drawVisor() { - const canvas = document.getElementById('visor'); - const ctx = canvas.getContext('2d'); - - ctx.beginPath(); - ctx.moveTo(5, 45); - ctx.bezierCurveTo(15, 64, 45, 64, 55, 45); - - ctx.lineTo(55, 20); - ctx.bezierCurveTo(55, 15, 50, 10, 45, 10); - - ctx.lineTo(15, 10); - - ctx.bezierCurveTo(15, 10, 5, 10, 5, 20); - ctx.lineTo(5, 45); - - ctx.fillStyle = '#2f3640'; - ctx.strokeStyle = '#f5f6fa'; - ctx.fill(); - ctx.stroke(); -} - -const cordCanvas = document.getElementById('cord'); -const ctx = cordCanvas.getContext('2d'); - -let y1 = 160; -let y2 = 100; -let y3 = 100; - -let y1Forward = true; -let y2Forward = false; -let y3Forward = true; - -function animate() { - requestAnimationFrame(animate); - ctx.clearRect(0, 0, innerWidth, innerHeight); - - ctx.beginPath(); - ctx.moveTo(130, 170); - ctx.bezierCurveTo(250, y1, 345, y2, 400, y3); - - ctx.strokeStyle = 'white'; - ctx.lineWidth = 8; - ctx.stroke(); - - - if (y1 === 100) { - y1Forward = true; - } - - if (y1 === 300) { - y1Forward = false; - } - - if (y2 === 100) { - y2Forward = true; - } - - if (y2 === 310) { - y2Forward = false; - } - - if (y3 === 100) { - y3Forward = true; +$(function() { + runScripts(data, 0); +}); + +function runScripts(data, pos) { + var prompt = $('.prompt'), + script = data[pos]; + if(script.clear === true) { + $('.history').html(''); } - - if (y3 === 317) { - y3Forward = false; + switch(script.action) { + case 'type': + // cleanup for next execution + prompt.removeData(); + $('.typed-cursor').text(''); + prompt.typed({ + strings: script.strings, + typeSpeed: 30, + callback: function() { + var history = $('.history').html(); + history = history ? [history] : []; + history.push('$ ' + prompt.text()); + if(script.output) { + history.push(script.output); + prompt.html(''); + $('.history').html(history.join('<br>')); + } + // scroll to bottom of screen + $('.terminal').scrollTop($('.terminal').height()); + // Run next script + pos++; + if(pos < data.length) { + setTimeout(function() { + runScripts(data, pos); + }, script.postDelay || 1000); + } + } + }); + break; + case 'view': + + break; } - - y1Forward ? y1 += 1 : y1 -= 1; - y2Forward ? y2 += 1 : y2 -= 1; - y3Forward ? y3 += 1 : y3 -= 1; } - -drawVisor(); -animate(); \ No newline at end of file