v1
1565
package-lock.json
generated
@ -6,9 +6,10 @@
|
|||||||
"@testing-library/jest-dom": "^5.16.2",
|
"@testing-library/jest-dom": "^5.16.2",
|
||||||
"@testing-library/react": "^12.1.3",
|
"@testing-library/react": "^12.1.3",
|
||||||
"@testing-library/user-event": "^13.5.0",
|
"@testing-library/user-event": "^13.5.0",
|
||||||
"markdown-to-jsx": "^7.1.6",
|
|
||||||
"react": "^17.0.2",
|
"react": "^17.0.2",
|
||||||
"react-dom": "^17.0.2",
|
"react-dom": "^17.0.2",
|
||||||
|
"react-markdown": "^8.0.0",
|
||||||
|
"react-router-dom": "^6.2.1",
|
||||||
"react-scripts": "5.0.0",
|
"react-scripts": "5.0.0",
|
||||||
"web-vitals": "^2.1.4"
|
"web-vitals": "^2.1.4"
|
||||||
},
|
},
|
||||||
|
|||||||
BIN
public/Game-Award-Saar-Logo.png
Normal file
|
After Width: | Height: | Size: 125 KiB |
BIN
public/PartyStarterScreen.png
Normal file
|
After Width: | Height: | Size: 1.7 MiB |
|
Before Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 9.4 KiB |
BIN
public/profilePicture.png
Normal file
|
After Width: | Height: | Size: 848 KiB |
BIN
public/screenMegaJump1.jpg
Normal file
|
After Width: | Height: | Size: 310 KiB |
BIN
public/screenMegaJump2.jpg
Normal file
|
After Width: | Height: | Size: 217 KiB |
BIN
public/screenMegaJump3.jpg
Normal file
|
After Width: | Height: | Size: 514 KiB |
BIN
public/screenSTF1.png
Normal file
|
After Width: | Height: | Size: 86 KiB |
BIN
public/screenSTF2.png
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
public/screenSTF3.png
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
public/screenSwitchyRoads1.jpg
Normal file
|
After Width: | Height: | Size: 749 KiB |
BIN
public/screenSwitchyRoads2.jpg
Normal file
|
After Width: | Height: | Size: 992 KiB |
BIN
public/screenSwitchyRoads3.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
public/simulationIcon.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
public/simulationScreen.png
Normal file
|
After Width: | Height: | Size: 229 KiB |
@ -0,0 +1,7 @@
|
|||||||
|
:root {
|
||||||
|
--black: #000000;
|
||||||
|
--green: green;
|
||||||
|
--blue: #1e90ff;
|
||||||
|
--red: #FF0018;
|
||||||
|
--font-size: 10pt;
|
||||||
|
}
|
||||||
35
src/App.js
@ -1,9 +1,42 @@
|
|||||||
|
import {BrowserRouter, Routes, Route} from 'react-router-dom';
|
||||||
import './App.css';
|
import './App.css';
|
||||||
import CommandLineManager from './commandline/CommandLineManager';
|
import CommandLineManager from './commandline/CommandLineManager';
|
||||||
|
import About from './pages/About';
|
||||||
|
import Clear from './pages/Clear';
|
||||||
|
import Home from './pages/Home';
|
||||||
|
import Layout from './pages/Layout';
|
||||||
|
import Links from './pages/Links';
|
||||||
|
import Ls from './pages/Ls';
|
||||||
|
import Mega from './pages/Mega';
|
||||||
|
import Network from './pages/Network';
|
||||||
|
import NotFound from './pages/NotFound';
|
||||||
|
import Party from './pages/Party';
|
||||||
|
import Projects from './pages/Projects';
|
||||||
|
import Safe from './pages/Safe';
|
||||||
|
import Start from './pages/Start';
|
||||||
|
import Switchy from './pages/Switchy';
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
return (
|
return (
|
||||||
<CommandLineManager/>
|
<BrowserRouter>
|
||||||
|
<Routes>
|
||||||
|
<Route path="/" element={<Layout/>}>
|
||||||
|
<Route index element={<Start/>}/>
|
||||||
|
<Route path="/home" element={<Home/>}/>
|
||||||
|
<Route path="/about" element={<About/>}/>
|
||||||
|
<Route path="/projects" element={<Projects/>}/>
|
||||||
|
<Route path="/switchy" element={<Switchy/>}/>
|
||||||
|
<Route path="/mega" element={<Mega/>}/>
|
||||||
|
<Route path="/safe" element={<Safe/>}/>
|
||||||
|
<Route path="/party" element={<Party/>}/>
|
||||||
|
<Route path="/network" element={<Network/>}/>
|
||||||
|
<Route path="/links" element={<Links/>}/>
|
||||||
|
<Route path="/clear" element={<Clear/>}/>
|
||||||
|
<Route path="/ls" element={<Ls/>}/>
|
||||||
|
<Route path="*" element={<NotFound/>}/>
|
||||||
|
</Route>
|
||||||
|
</Routes>
|
||||||
|
</BrowserRouter>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
19
src/commandline/Code.jsx
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import {useEffect, useState} from "react";
|
||||||
|
|
||||||
|
function Code(props) {
|
||||||
|
const [textId, setTextId] = useState(-props.node.position.start.offset);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if(textId <= props.code.children[0].length) {
|
||||||
|
setTimeout(() => {
|
||||||
|
setTextId(textId + props.speed);
|
||||||
|
}, 1)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return(
|
||||||
|
<code>{props.code.children[0].substring(0, textId)}</code>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Code;
|
||||||
@ -1,43 +1,27 @@
|
|||||||
import Markdown from "markdown-to-jsx";
|
import ReactMarkdown from "react-markdown";
|
||||||
import {useEffect, useState} from "react";
|
import Code from "./Code";
|
||||||
|
import Image from "./Image";
|
||||||
import test from "./content/test.png";
|
import Link from "./Link";
|
||||||
|
import Paragraph from "./Paragraph";
|
||||||
|
|
||||||
function CommandLineEntry(props) {
|
function CommandLineEntry(props) {
|
||||||
// set the path to the correct md file via props
|
const speed = Math.round(1 + (Number)(props.text.length / 1000));
|
||||||
const path = require(`./content/${ props.content }.md`);
|
|
||||||
const [text, updateText] = useState("");
|
|
||||||
|
|
||||||
// fetching the content of path
|
|
||||||
fetch(path).then(r => {
|
|
||||||
return r.text();
|
|
||||||
}).then(text => {
|
|
||||||
updateText(text);
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
const [displayIndex, setDisplayIndex] = useState(0);
|
|
||||||
|
|
||||||
var intervalId;
|
|
||||||
useEffect(() => {
|
|
||||||
intervalId = setInterval(() => {
|
|
||||||
if (displayIndex < text.length) {
|
|
||||||
setDisplayIndex(displayIndex + 1);
|
|
||||||
} else {
|
|
||||||
clearInterval(intervalId);
|
|
||||||
}
|
|
||||||
}, 1);
|
|
||||||
return function cleanup() {
|
|
||||||
clearInterval(intervalId);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const getTextToDisplay = () => {
|
|
||||||
return text.substring(0, displayIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(
|
return(
|
||||||
<Markdown>{getTextToDisplay()}</Markdown>
|
<ReactMarkdown children={props.text}
|
||||||
|
components= {{
|
||||||
|
p: ({node, ...props}) => {
|
||||||
|
return <Paragraph node={node} children={props.children} speed={speed}/>;
|
||||||
|
},
|
||||||
|
img: ({node, ...props}) => {
|
||||||
|
return <Image node={node} image={props} speed={speed}/>
|
||||||
|
},
|
||||||
|
a: ({node, ...props}) => {
|
||||||
|
return <Link node={node} link={props} speed={speed}/>
|
||||||
|
},
|
||||||
|
code: ({node, ...props}) => {
|
||||||
|
return <Code node={node} code={props} speed={speed}/>
|
||||||
|
},
|
||||||
|
}}/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
20
src/commandline/CommandLineManager.css
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
#commandLineManager:before {
|
||||||
|
content: " ";
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
background: linear-gradient(
|
||||||
|
to bottom,
|
||||||
|
rgba(18, 16, 16, 0) 50%,
|
||||||
|
rgba(0, 0, 0, 0.25) 50%
|
||||||
|
);
|
||||||
|
background-size: 100% 3px;
|
||||||
|
z-index: 2;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1,27 +1,30 @@
|
|||||||
import {useState} from 'react';
|
import "./CommandLineManager.css";
|
||||||
|
import {useEffect, useState} from 'react';
|
||||||
import CommandLineEntry from './CommandLineEntry.jsx';
|
import CommandLineEntry from './CommandLineEntry.jsx';
|
||||||
import Prompt from './Prompt.jsx';
|
import Prompt from './Prompt.jsx';
|
||||||
|
|
||||||
function CommandLineManager() {
|
function CommandLineManager(props) {
|
||||||
const [input, setInput] = useState("");
|
|
||||||
|
|
||||||
const updateInput = (e) => {
|
// set the path to the correct md file via props
|
||||||
setInput(e.target.value);
|
const path = require(`./content/${ props.page }.md`);
|
||||||
}
|
const [text, updateText] = useState("");
|
||||||
|
|
||||||
const submitInput = (e) => {
|
fetch(path).then(r => {
|
||||||
//check if enter was pressed
|
return r.text();
|
||||||
if (e.keyCode === 13) {
|
}).then(text => {
|
||||||
console.log(input);
|
updateText(text);
|
||||||
}
|
});
|
||||||
|
|
||||||
|
const getDelay = () => {
|
||||||
|
return (text.length / Math.round(1 + (Number)(text.length / 1000))) + 50;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(
|
return(
|
||||||
<div id="commandLineManager">
|
<div id="commandLineManager">
|
||||||
<CommandLineEntry content={"start"}/>
|
<CommandLineEntry text={text}/>
|
||||||
<Prompt input={input} updateInput={updateInput} submitInput={submitInput}/>
|
<Prompt delay={getDelay()}/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default CommandLineManager;
|
export default CommandLineManager;
|
||||||
|
|||||||
3
src/commandline/Image.css
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
img {
|
||||||
|
width: 170px;
|
||||||
|
}
|
||||||
20
src/commandline/Image.jsx
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
import "./Image.css";
|
||||||
|
import {useState, useEffect} from "react";
|
||||||
|
|
||||||
|
function Image(props) {
|
||||||
|
const [textId, setTextId] = useState(-props.node.position.start.offset);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if(textId < 0) {
|
||||||
|
setTimeout(() => {
|
||||||
|
setTextId(textId + props.speed);
|
||||||
|
}, 1)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
textId >= 0 ? <img src={props.image.src} alt={props.image.alt}/> : <div></div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Image;
|
||||||
19
src/commandline/Link.jsx
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import {useEffect, useState} from "react";
|
||||||
|
|
||||||
|
function Link(props) {
|
||||||
|
const [textId, setTextId] = useState(-props.node.position.start.offset);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if(textId <= props.link.children[0].length) {
|
||||||
|
setTimeout(() => {
|
||||||
|
setTextId(textId + props.speed);
|
||||||
|
}, 1)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return(
|
||||||
|
<a href={props.link.href}>{props.link.children[0].substring(0, textId)}</a>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Link;
|
||||||
38
src/commandline/Paragraph.jsx
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import {useEffect, useState} from "react";
|
||||||
|
import ReactMarkdown from "react-markdown";
|
||||||
|
import Text from "./Text";
|
||||||
|
|
||||||
|
function Paragraph(props) {
|
||||||
|
const generateDisplay = () => {
|
||||||
|
var buffer = [];
|
||||||
|
var currentColor = undefined;
|
||||||
|
for (var i = 0; i < props.children.length; i++) {
|
||||||
|
//filter out newlines... they are managed by <br/>
|
||||||
|
if(props.children[i] === "\n") continue;
|
||||||
|
|
||||||
|
if(props.node.children[i].type === "text") {
|
||||||
|
var offset = props.node.children[i].position.start.offset;
|
||||||
|
buffer.push(<Text color={currentColor} key={i} text={props.children[i]} offset={offset} speed={props.speed}/>);
|
||||||
|
} else if(props.node.children[i].type === "raw") {
|
||||||
|
var color = props.children[i].replace("<", "")
|
||||||
|
color = color.replace(">", "");
|
||||||
|
if(color === "clear") {
|
||||||
|
currentColor = undefined;
|
||||||
|
} else {
|
||||||
|
currentColor = color;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
buffer.push(props.children[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(
|
||||||
|
<div>
|
||||||
|
{generateDisplay()}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Paragraph;
|
||||||
@ -5,8 +5,32 @@
|
|||||||
display: inline;
|
display: inline;
|
||||||
border: none;
|
border: none;
|
||||||
outline: none;
|
outline: none;
|
||||||
width: 70%;
|
|
||||||
padding: 0;
|
padding: 0;
|
||||||
font-size: 10pt;
|
font-size: var(--font-size);
|
||||||
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace;
|
font-family: "VT323", monospace;
|
||||||
|
font-size: 14pt;
|
||||||
|
text-transform: uppercase;
|
||||||
|
/*font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace;*/
|
||||||
|
color: var(--green);
|
||||||
|
background-color: var(--black);
|
||||||
|
caret-color: transparent;
|
||||||
|
}
|
||||||
|
#inputCursor {
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: -5px;
|
||||||
|
animation: cursor 0.7s infinite;
|
||||||
|
animation-timing-function: step-end;
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes cursor {
|
||||||
|
0% {
|
||||||
|
color: transparent;
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
color: var(--green);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
color: var(--green);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,81 @@
|
|||||||
|
import {useEffect, useState} from 'react';
|
||||||
|
import {useNavigate} from 'react-router-dom';
|
||||||
import './Prompt.css';
|
import './Prompt.css';
|
||||||
|
|
||||||
function Prompt(props) {
|
function Prompt(props) {
|
||||||
|
const [input, setInput] = useState("");
|
||||||
|
const [visible, setVisible] = useState(false);
|
||||||
|
const navigate = useNavigate();
|
||||||
|
|
||||||
|
var focusIntervalId;
|
||||||
|
//periodically focus the input
|
||||||
|
useEffect(() => {
|
||||||
|
const input = document.querySelector("input");
|
||||||
|
focusIntervalId = setInterval(() => {
|
||||||
|
input.focus();
|
||||||
|
}, 100);
|
||||||
|
return () => {
|
||||||
|
clearInterval(focusIntervalId);
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
var visibleTimeoutId;
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if(props.delay != 0) {
|
||||||
|
visibleTimeoutId = setTimeout(() => {
|
||||||
|
setVisible(true);
|
||||||
|
}, props.delay * 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
clearTimeout(visibleTimeoutId);
|
||||||
|
}
|
||||||
|
}, [props.delay]);
|
||||||
|
|
||||||
|
const updateInput = (e) => {
|
||||||
|
var value = e.target.value.trim().toLowerCase();
|
||||||
|
setInput(value);
|
||||||
|
var element = document.getElementById("promptInput");
|
||||||
|
element.setAttribute("size", value.length + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
var element = document.getElementById("promptInput");
|
||||||
|
element.setAttribute("size", 1);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
|
||||||
|
const submitInput = (e) => {
|
||||||
|
//check if enter was pressed
|
||||||
|
if (e.keyCode === 13) {
|
||||||
|
if(input.length > 0) {
|
||||||
|
if(input.toLowerCase() === "reload") {
|
||||||
|
window.location.reload();
|
||||||
|
}
|
||||||
|
navigate(`/${ input.trim() }`);
|
||||||
|
}
|
||||||
|
setInput("");
|
||||||
|
document.getElementById("promptInput").setAttribute("size", 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(visible) {
|
||||||
|
return(
|
||||||
|
<div className="Prompt">
|
||||||
|
<p id="ps1">visitor@julius {'>'} </p>
|
||||||
|
<input id="promptInput" type="text" autoFocus={true} maxLength={20}
|
||||||
|
value={input} onChange={updateInput} onKeyDown={submitInput}/>
|
||||||
|
<div id="inputCursor">_</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return(
|
return(
|
||||||
<div className="Prompt">
|
<div className="Prompt">
|
||||||
<p id="ps1">visitor@julius $ </p>
|
<p id="ps1" style={{display: "none"}}>visitor@julius $ </p>
|
||||||
<input id="promptInput" type="text" autoFocus={true} maxLength={20}
|
<input id="promptInput" style={{display: "none"}} type="text" autoFocus={true} maxLength={20}
|
||||||
value={props.input} onChange={props.updateInput} onKeyDown={props.submitInput}/>
|
value={input} onChange={updateInput} onKeyDown={submitInput}/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
3
src/commandline/Text.css
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.typingText {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
35
src/commandline/Text.jsx
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import {useEffect, useState} from "react";
|
||||||
|
import "./Text.css";
|
||||||
|
|
||||||
|
function Text(props) {
|
||||||
|
const [textId, setTextId] = useState(-props.offset);
|
||||||
|
const [content, setContent] = useState();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if(textId <= props.text.length) {
|
||||||
|
setTimeout(() => {
|
||||||
|
setTextId(textId + props.speed);
|
||||||
|
}, 1)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if(props.color != undefined) {
|
||||||
|
//comment below for hex colors
|
||||||
|
//<font color={`#${props.color.replace("color", "")}`}>{props.text.substring(0, textId)}</font>
|
||||||
|
|
||||||
|
//use css variables for inline color
|
||||||
|
var r = document.querySelector(':root');
|
||||||
|
var rs = getComputedStyle(r);
|
||||||
|
return (
|
||||||
|
<div className="typingText">
|
||||||
|
<font color={rs.getPropertyValue(`--${props.color.replace("color", "")}`)}>{props.text.substring(0, textId)}</font>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return (
|
||||||
|
<div className="typingText">{props.text.substring(0, textId)}</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Text;
|
||||||
13
src/commandline/content/404.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
__ __ __ __ __
|
||||||
|
/\ \\ \ /'__`\/\ \\ \
|
||||||
|
\ \ \\ \ /\ \/\ \ \ \\ \
|
||||||
|
\ \ \\ \_\ \ \ \ \ \ \\ \_
|
||||||
|
\ \__ ,__\ \ \_\ \ \__ ,__\
|
||||||
|
\/_/\_\_/\ \____/\/_/\_\_/
|
||||||
|
\/_/ \/___/ \/_/
|
||||||
|
<colorred>Error 404<clear> This page could not be found...\
|
||||||
|
Maybe you had a typo?\
|
||||||
|
There is nothing to see.\
|
||||||
|
no, really.\
|
||||||
|
\
|
||||||
|
[home](/home)
|
||||||
21
src/commandline/content/about.md
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
** ** ** **** ****
|
||||||
|
**** /** /** /**/** **/**
|
||||||
|
**//** /** ****** ** ** ****** /**//** ** /** *****
|
||||||
|
** //** /****** **////**/** /**///**/ /** //*** /** **///**
|
||||||
|
**********/**///**/** /**/** /** /** /** //* /**/*******
|
||||||
|
/**//////**/** /**/** /**/** /** /** /** / /**/**////
|
||||||
|
/** /**/****** //****** //****** //** /** /**//******
|
||||||
|
// // ///// ////// ////// // // // //////
|
||||||
|
|
||||||
|
My name is Julius Herrmann and this is me:\
|
||||||
|
\
|
||||||
|
I am currently studying Computer Science at the University Of Saarland in Germany.
|
||||||
|
While completing my bachelor I aim to expand my knowledge of coding by creating many side projects, this website being one of them.\
|
||||||
|
Before studying I have completed my A-Levels here in Germany.\
|
||||||
|
In my free time I teach children how to program, play ultimate frisbee and train parkour.\
|
||||||
|
One of my most successfull projects is [Switchy Roads](/switchy).\
|
||||||
|
With this game I have won two categories in the game award saar 2019.\
|
||||||
|
\
|
||||||
|
I am always up for a challenge or any opportunity so feel free to contact me under the following [links](/links).\
|
||||||
|
\
|
||||||
|
[home](/home) [about](/about) [projects](/projects) [links](/links)
|
||||||
1
src/commandline/content/clear.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
[about](/about) [projects](/projects) [home](/home)
|
||||||
34
src/commandline/content/home.md
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
__ __ ______ __
|
||||||
|
/\ \/\ \/\__ _\ /\ \
|
||||||
|
\ \ \_\ \/_/\ \/ \ \ \
|
||||||
|
\ \ _ \ \ \ \ \ \ \
|
||||||
|
\ \ \ \ \ \_\ \__\ \_\
|
||||||
|
\ \_\ \_\/\_____\\/\_\
|
||||||
|
\/_/\/_/\/_____/ \/_/
|
||||||
|
|
||||||
|
This is my personal experimental website inspired by command line prompts.\
|
||||||
|
This website works best in fullscreen on a desktop or widescreen on a phone.\
|
||||||
|
The source code for this website is [here](https://git.juliusherrmann.de/JuliusHerrmann/commandlinewebsite)\
|
||||||
|
I also have a "classic" website [here](https://juliusherrmann.de)\
|
||||||
|
\
|
||||||
|
<colorblue>Who am I?<clear>\
|
||||||
|
I am a university student, studying computer science at the University of Saarland in Germany.\
|
||||||
|
I have been coding since sixth grade and I am always up for a new coding challenge.\
|
||||||
|
Besides studying I also work at my university as a programmer for various tasks. Check out my projects!.\
|
||||||
|
Cybersecurity is also one of my interests which I combine with my computer science major.\
|
||||||
|
Other hobbies of mine are ultimate frisbee and parkour.\
|
||||||
|
But most importantly:
|
||||||
|
|
||||||
|
.-"""-. .-"""-. .----.
|
||||||
|
/ `..' \ .---------. | == |
|
||||||
|
::::::::::: | | |.-"""""-.| |----|
|
||||||
|
:+: | | || || | == |
|
||||||
|
+:+ \ / || || |----|
|
||||||
|
+#+ \ / |'-.....-'| |::::|
|
||||||
|
+#+ `\ /' `"")---(""` |___.|
|
||||||
|
#+# `\ /' /:::::::::::\" _ "
|
||||||
|
########### `\ /' /:::=======:::\`\`\
|
||||||
|
`\/' `"""""""""""""` '-'
|
||||||
|
|
||||||
|
You can visit any of the following links by either clicking on them or typing them and then pressing enter.\
|
||||||
|
[about](/about) [projects](/projects) [links](/links) [home](/home)
|
||||||
52
src/commandline/content/links.md
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
::: ::::::::::: :::: ::: ::: ::: ::::::::
|
||||||
|
:+: :+: :+:+: :+: :+: :+: :+: :+:
|
||||||
|
+:+ +:+ :+:+:+ +:+ +:+ +:+ +:+
|
||||||
|
+#+ +#+ +#+ +:+ +#+ +#++:++ +#++:++#++
|
||||||
|
+#+ +#+ +#+ +#+#+# +#+ +#+ +#+
|
||||||
|
#+# #+# #+# #+#+# #+# #+# #+# #+#
|
||||||
|
########## ########### ### #### ### ### ########
|
||||||
|
|
||||||
|
|
||||||
|
<colorred>Feel free to contact me on any of the following platforms :)<clear>
|
||||||
|
|
||||||
|
__ __ __ ______ _______ ______ ________ _________ ______
|
||||||
|
/_//_//_/\ /_____/\ /_______/\ /_____/\ /_______/\/________/\/_____/\
|
||||||
|
\:\\:\\:\ \\::::_\/_\::: _ \ \\::::_\/_ \__.::._\/\__.::.__\/\::::_\/_
|
||||||
|
\:\\:\\:\ \\:\/___/\\::(_) \/_\:\/___/\ \::\ \ \::\ \ \:\/___/\
|
||||||
|
\:\\:\\:\ \\::___\/_\:: _ \ \\_::._\:\ _\::\ \__ \::\ \ \::___\/_
|
||||||
|
\:\\:\\:\ \\:\____/\\::(_) \ \ /____\:\/__\::\__/\ \::\ \ \:\____/\
|
||||||
|
\_______\/ \_____\/ \_______\/ \_____\/\________\/ \__\/ \_____\/
|
||||||
|
|
||||||
|
[website](https://juliusherrmann.de)
|
||||||
|
|
||||||
|
_______ ________ _________
|
||||||
|
/______/\ /_______/\/________/\
|
||||||
|
\::::__\/__\__.::._\/\__.::.__\/
|
||||||
|
\:\ /____/\ \::\ \ \::\ \
|
||||||
|
\:\\_ _\/ _\::\ \__ \::\ \
|
||||||
|
\:\_\ \ \ /__\::\__/\ \::\ \
|
||||||
|
\_____\/ \________\/ \__\/
|
||||||
|
|
||||||
|
[github](https://github.com/JuliusHerrmann) [personal git](https://git.juliusherrmann.de)
|
||||||
|
|
||||||
|
________ ___ __ ______ _________ ________
|
||||||
|
/_______/\/__/\ /__/\ /_____/\ /________/\/_______/\
|
||||||
|
\__.::._\/\::\_\\ \ \\::::_\/_\__.::.__\/\::: _ \ \
|
||||||
|
\::\ \ \:. `-\ \ \\:\/___/\ \::\ \ \::(_) \ \
|
||||||
|
_\::\ \__\:. _ \ \\_::._\:\ \::\ \ \:: __ \ \
|
||||||
|
/__\::\__/\\. \`-\ \ \ /____\:\ \::\ \ \:.\ \ \ \
|
||||||
|
\________\/ \__\/ \__\/ \_____\/ \__\/ \__\/\__\/
|
||||||
|
|
||||||
|
[instagram](https://www.instagram.com/definitely_julius)
|
||||||
|
|
||||||
|
___ __ __ ________ ________ __
|
||||||
|
/__//_//_/\ /_______/\ /_______/\/_/\
|
||||||
|
\::\| \| \ \\::: _ \ \ \__.::._\/\:\ \
|
||||||
|
\:. \ \\::(_) \ \ \::\ \ \:\ \
|
||||||
|
\:.\-/\ \ \\:: __ \ \ _\::\ \__\:\ \____
|
||||||
|
\. \ \ \ \\:.\ \ \ \/__\::\__/\\:\/___/\
|
||||||
|
\__\/ \__\/ \__\/\__\/\________\/ \_____\/
|
||||||
|
|
||||||
|
herrmann.julius@protonmail.com | [mailto](mailto:herrmann.julius@gmx.de)\
|
||||||
|
\
|
||||||
|
[home](/home) [about](/about) [projects](/projects)
|
||||||
1
src/commandline/content/ls.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
[home](/home) [about](/about) [projects](/projects) [links](/links)
|
||||||
18
src/commandline/content/mega.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
__ __ _
|
||||||
|
| \/ | | |
|
||||||
|
| \ / | ___ __ _ __ _ | |_ _ _ __ ___ _ __
|
||||||
|
| |\/| |/ _ \/ _` |/ _` | _ | | | | | '_ ` _ \| '_ \
|
||||||
|
| | | | __/ (_| | (_| | | |__| | |_| | | | | | | |_) |
|
||||||
|
|_| |_|\___|\__, |\__,_| \____/ \__,_|_| |_| |_| .__/
|
||||||
|
__/ | | |
|
||||||
|
|___/ |_|
|
||||||
|
|
||||||
|
   \
|
||||||
|
Mega Jump is a fun endless runner or rather jumper.\
|
||||||
|
The higher you jump, the better. Getting higher will also bring new challenges.\
|
||||||
|
Play with three different characters and beat your highscore.\
|
||||||
|
If you are good enough you can even reach space.
|
||||||
|
|
||||||
|
[Download](https://play.google.com/store/apps/details?id=com.JukeGames.MegaJump)\
|
||||||
|
\
|
||||||
|
[switchy](/switchy) [mega](/mega) [safe](/safe) [network](/network) [home](/home)
|
||||||
16
src/commandline/content/network.md
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
_____ _ _ _ _
|
||||||
|
/ ____(_) | | | | (_)
|
||||||
|
| (___ _ _ __ ___ _ _| | __ _| |_ _ ___ _ __
|
||||||
|
\___ \| | '_ ` _ \| | | | |/ _` | __| |/ _ \| '_ \
|
||||||
|
____) | | | | | | | |_| | | (_| | |_| | (_) | | | |
|
||||||
|
|_____/|_|_| |_| |_|\__,_|_|\__,_|\__|_|\___/|_| |_|
|
||||||
|
|
||||||
|
 \
|
||||||
|
This is a continuous-time stochastic simulation of epidemic spreading on human-to-human contact networks.\
|
||||||
|
I developed this at my university job.\
|
||||||
|
I coded the whole frontend. The actual code for the simulation is not by me as computer simulation is not my current major.\
|
||||||
|
It was a very good exercise in learning React.\
|
||||||
|
|
||||||
|
[Open](https://gerritgr.github.io/NetworkEpidemicPlayground-React/)\
|
||||||
|
\
|
||||||
|
[switchy](/switchy) [mega](/mega) [safe](/safe) [network](/network) [home](/home)
|
||||||
20
src/commandline/content/party.md
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
_____ _
|
||||||
|
| __ \ | |
|
||||||
|
| |__) |_ _ _ __| |_ _ _
|
||||||
|
| ___/ _` | '__| __| | | |
|
||||||
|
| | | (_| | | | |_| |_| |
|
||||||
|
|_| \__,_|_| \__|\__, |
|
||||||
|
__/ |
|
||||||
|
|___/
|
||||||
|
|
||||||
|
|
||||||
|
\
|
||||||
|
Party Starter is a party drinking game to elevate your party to the next level.\
|
||||||
|
Use a laptop or any other large screen like a TV to host a new round by opening the link and clicking "new game".\
|
||||||
|
Each player connects to the same Website on his phone, enters the Game ID and chooses a name.\
|
||||||
|
Once everyone is connected the host can start the game. Have fun!\
|
||||||
|
|
||||||
|
Note: This game is only available in german.\
|
||||||
|
[Play](https://partystartergame.herokuapp.com/)\
|
||||||
|
\
|
||||||
|
[switchy](/switchy) [mega](/mega) [safe](/safe) [network](/network) [home](/home)
|
||||||
14
src/commandline/content/projects.md
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
dBBBBBb dBBBBBb dBBBBP dBP dBBBP dBBBP dBBBBBBP.dBBBBP
|
||||||
|
dB' dBP dBP.BP BP
|
||||||
|
dBBBP' dBBBBK dBP.BP dBP dBBP dBP dBP `BBBBb
|
||||||
|
dBP dBP BB dBP.BP dB'dBP dBP dBP dBP dBP
|
||||||
|
dBP dBP dB' dBBBBP dBBBBP dBBBBP dBBBBP dBP dBBBBP'
|
||||||
|
here are my projects:
|
||||||
|
|
||||||
|
[Switchy Roads](/switchy) -> Android Game\
|
||||||
|
[Mega Jump](/mega) -> Android Game\
|
||||||
|
[Safe That Fish](/safe) -> Ludum Dare Entry\
|
||||||
|
[Party Starter](/party) -> Party game\
|
||||||
|
[Network Epidemic Playground](/network) -> Simulation\
|
||||||
|
\
|
||||||
|
[switchy](/switchy) [mega](/mega) [safe](/safe) [network](/network) [home](/home)
|
||||||
16
src/commandline/content/safe.md
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
_ _ _____
|
||||||
|
| | | | | __ \
|
||||||
|
| | _ _ __| |_ _ _ __ ___ | | | | __ _ _ __ ___
|
||||||
|
| | | | | |/ _` | | | | '_ ` _ \ | | | |/ _` | '__/ _ \
|
||||||
|
| |___| |_| | (_| | |_| | | | | | | | |__| | (_| | | | __/
|
||||||
|
|______\__,_|\__,_|\__,_|_| |_| |_| |_____/ \__,_|_| \___|
|
||||||
|
|
||||||
|
  \
|
||||||
|
Safe That Fish! is my entry for the 42nd ludum dare game jam.\
|
||||||
|
A game competition with the theme "running out of space".\
|
||||||
|
This game was completely made in 48 hours. Safe all your fish from being eaten.\
|
||||||
|
How good are you at multitasking? Will you run out of space?\
|
||||||
|
[play](https://jukegames.itch.io/safe-that-fish)\
|
||||||
|
[ldjam.com](https://ldjam.com/events/ludum-dare/42/save-that-fish)\
|
||||||
|
\
|
||||||
|
[switchy](/switchy) [mega](/mega) [safe](/safe) [network](/network) [home](/home)
|
||||||
@ -1,7 +1,24 @@
|
|||||||
# Welcome
|
:'########:::'#######:::'#######::'########:
|
||||||
This is an interactive website.
|
: ##.... ##:'##.... ##:'##.... ##:... ##..::
|
||||||
|
: ##:::: ##: ##:::: ##: ##:::: ##:::: ##::::
|
||||||
You can watch content by typing or clicking on the options below.
|
: ########:: ##:::: ##: ##:::: ##:::: ##::::
|
||||||
|
: ##.... ##: ##:::: ##: ##:::: ##:::: ##::::
|
||||||
|
: ##:::: ##: ##:::: ##: ##:::: ##:::: ##::::
|
||||||
[about](/about), [projects](/projects), [home](/home)
|
: ########::. #######::. #######::::: ##::::
|
||||||
|
:........::::.......::::.......::::::..:::::
|
||||||
|
booting system\
|
||||||
|
initializing pizza\
|
||||||
|
collecting thoughts\
|
||||||
|
compiling kernel\
|
||||||
|
calculating answer to everything\
|
||||||
|
result: 42\
|
||||||
|
applying answer\
|
||||||
|
<colorred> failed <clear>\
|
||||||
|
initializing quantum computing unit <colorred>[1/4]<clear>\
|
||||||
|
initializing quantum computing unit <colorred>[2/4]<clear>\
|
||||||
|
initializing quantum computing unit <colorred>[3/4]<clear>\
|
||||||
|
initializing quantum computing unit <colorred>[4/4]<clear>\
|
||||||
|
<colorblue>DONE!<clear>\
|
||||||
|
\
|
||||||
|
<clear>Navigate to a page by typing one of the following commands (or click them)\
|
||||||
|
[home](/home) [reload](/)
|
||||||
|
|||||||
17
src/commandline/content/switchy.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
_____ _ _ _ _____ _
|
||||||
|
/ ____| (_) | | | | __ \ | |
|
||||||
|
| (_____ ___| |_ ___| |__ _ _ | |__) |___ __ _ __| |___
|
||||||
|
\___ \ \ /\ / / | __/ __| '_ \| | | | | _ // _ \ / _` |/ _` / __|
|
||||||
|
____) \ V V /| | || (__| | | | |_| | | | \ \ (_) | (_| | (_| \__ \
|
||||||
|
|_____/ \_/\_/ |_|\__\___|_| |_|\__, | |_| \_\___/ \__,_|\__,_|___/
|
||||||
|
__/ |
|
||||||
|
|___/
|
||||||
|
|
||||||
|
  \
|
||||||
|
Switchy Roads is a mind bending puzzle game for android devices.\
|
||||||
|
You can challenge your mind by solving puzzles and guiding your vehicle to the goal.\
|
||||||
|
The mind bending part comes into play when you look at the level design.\
|
||||||
|
It really challenges you and has 60 level in 3 different, unique worlds\
|
||||||
|
[download](https://play.google.com/store/apps/details?id=com.JukeGames.SwitchyRoads)\
|
||||||
|
\
|
||||||
|
[switchy](/switchy) [mega](/mega) [safe](/safe) [network](/network) [home](/home)
|
||||||
@ -1,18 +1,29 @@
|
|||||||
|
@import url("https://fonts.googleapis.com/css?family=VT323&display=swap");
|
||||||
html {
|
html {
|
||||||
|
line-height: 18px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
width: 100vw;
|
width: 100vw;
|
||||||
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace;
|
/*font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace;*/
|
||||||
font-size: 9pt;
|
font-family: "VT323", monospace;
|
||||||
|
font-size: 14pt;
|
||||||
|
text-transform: uppercase;
|
||||||
|
background-color: var(--black);
|
||||||
}
|
}
|
||||||
body {
|
body {
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: scroll;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
color: var(--green);
|
||||||
}
|
}
|
||||||
|
|
||||||
code {
|
code {
|
||||||
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
|
line-height: 0;
|
||||||
monospace;
|
font-family: "VT323", monospace;
|
||||||
|
/*font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',*/
|
||||||
|
/*monospace;*/
|
||||||
}
|
}
|
||||||
|
|||||||
9
src/pages/About.jsx
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import CommandLineManager from "../commandline/CommandLineManager";
|
||||||
|
|
||||||
|
function About() {
|
||||||
|
return(
|
||||||
|
<CommandLineManager page={"about"}/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default About;
|
||||||
9
src/pages/Clear.jsx
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import CommandLineManager from "../commandline/CommandLineManager";
|
||||||
|
|
||||||
|
function Clear() {
|
||||||
|
return(
|
||||||
|
<CommandLineManager page={"clear"}/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Clear;
|
||||||
9
src/pages/Home.jsx
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import CommandLineManager from "../commandline/CommandLineManager";
|
||||||
|
|
||||||
|
function Home() {
|
||||||
|
return(
|
||||||
|
<CommandLineManager page={"home"}/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Home;
|
||||||
31
src/pages/Layout.css
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#screenBezel {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scanline {
|
||||||
|
width: 100%;
|
||||||
|
height: 100px;
|
||||||
|
z-index: 8;
|
||||||
|
background: linear-gradient(
|
||||||
|
0deg,
|
||||||
|
rgba(0, 0, 0, 0) 0%,
|
||||||
|
rgba(255, 255, 255, 0.2) 10%,
|
||||||
|
rgba(0, 0, 0, 0.1) 100%
|
||||||
|
);
|
||||||
|
opacity: 0.1;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 100%;
|
||||||
|
animation: scanline 10s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes scanline {
|
||||||
|
0% {
|
||||||
|
bottom: 100%;
|
||||||
|
}
|
||||||
|
80% {
|
||||||
|
bottom: 100%;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
bottom: 0%;
|
||||||
|
}
|
||||||
|
}
|
||||||
15
src/pages/Layout.jsx
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import "./Layout.css";
|
||||||
|
import {Outlet} from "react-router";
|
||||||
|
|
||||||
|
function Layout() {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<div className="scanline"></div>
|
||||||
|
<div id="screenBezel">
|
||||||
|
<Outlet/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Layout;
|
||||||
9
src/pages/Links.jsx
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import CommandLineManager from "../commandline/CommandLineManager";
|
||||||
|
|
||||||
|
function Links() {
|
||||||
|
return(
|
||||||
|
<CommandLineManager page={"links"}/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Links;
|
||||||
9
src/pages/Ls.jsx
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import CommandLineManager from "../commandline/CommandLineManager";
|
||||||
|
|
||||||
|
function Ls() {
|
||||||
|
return(
|
||||||
|
<CommandLineManager page={"ls"}/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Ls;
|
||||||
9
src/pages/Mega.jsx
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import CommandLineManager from "../commandline/CommandLineManager";
|
||||||
|
|
||||||
|
function Mega() {
|
||||||
|
return(
|
||||||
|
<CommandLineManager page={"mega"}/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Mega;
|
||||||
9
src/pages/Network.jsx
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import CommandLineManager from "../commandline/CommandLineManager";
|
||||||
|
|
||||||
|
function Network() {
|
||||||
|
return(
|
||||||
|
<CommandLineManager page={"network"}/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Network;
|
||||||
9
src/pages/NotFound.jsx
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import CommandLineManager from "../commandline/CommandLineManager";
|
||||||
|
|
||||||
|
function NotFound() {
|
||||||
|
return(
|
||||||
|
<CommandLineManager page={"404"}/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default NotFound;
|
||||||
9
src/pages/Party.jsx
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import CommandLineManager from "../commandline/CommandLineManager";
|
||||||
|
|
||||||
|
function Party() {
|
||||||
|
return(
|
||||||
|
<CommandLineManager page={"party"}/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Party;
|
||||||
9
src/pages/Projects.jsx
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import CommandLineManager from "../commandline/CommandLineManager";
|
||||||
|
|
||||||
|
function Projects() {
|
||||||
|
return(
|
||||||
|
<CommandLineManager page={"projects"}/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Projects;
|
||||||
9
src/pages/Safe.jsx
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import CommandLineManager from "../commandline/CommandLineManager";
|
||||||
|
|
||||||
|
function Safe() {
|
||||||
|
return(
|
||||||
|
<CommandLineManager page={"safe"}/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Safe;
|
||||||
46
src/pages/Start.css
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#animationOverlay {
|
||||||
|
transform: scale(0,0);
|
||||||
|
animation: turn-on 4s linear;
|
||||||
|
animation-delay: 1s;
|
||||||
|
animation-fill-mode:forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes turn-on{
|
||||||
|
0%{
|
||||||
|
transform:scale(1,0.8) translate3d(0,0,0);
|
||||||
|
-webkit-filter:brightness(30);
|
||||||
|
filter:brightness(30);
|
||||||
|
opacity:1;
|
||||||
|
}
|
||||||
|
3.5%{
|
||||||
|
transform:scale(1,0.8) translate3d(0,100%,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
3.6%{
|
||||||
|
transform:scale(1,0.8) translate3d(0,-100%,0);
|
||||||
|
opacity:1;
|
||||||
|
}
|
||||||
|
|
||||||
|
9%{
|
||||||
|
transform:scale(1.3,0.6) translate3d(0,100%,0);
|
||||||
|
-webkit-filter:brightness(30);
|
||||||
|
filter:brightness(30);
|
||||||
|
opacity:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
11%{
|
||||||
|
transform:scale(1,1) translate3d(0,0,0);
|
||||||
|
-webkit-filter:contrast(0) brightness(0) ;
|
||||||
|
filter:contrast(0) brightness(0);
|
||||||
|
opacity:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100%{
|
||||||
|
transform:scale(1,1) translate3d(0,0,0);
|
||||||
|
-webkit-filter:contrast(1) brightness(1.2) saturate(1.3);
|
||||||
|
filter:contrast(1) brightness(1.2) saturate(1.3);
|
||||||
|
opacity:1;
|
||||||
|
}
|
||||||
|
}
|
||||||
12
src/pages/Start.jsx
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import "./Start.css";
|
||||||
|
import CommandLineManager from "../commandline/CommandLineManager";
|
||||||
|
|
||||||
|
function Start() {
|
||||||
|
return(
|
||||||
|
<div id="animationOverlay">
|
||||||
|
<CommandLineManager page={"start"}/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Start;
|
||||||
9
src/pages/Switchy.jsx
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import CommandLineManager from "../commandline/CommandLineManager";
|
||||||
|
|
||||||
|
function Switchy() {
|
||||||
|
return(
|
||||||
|
<CommandLineManager page={"switchy"}/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Switchy;
|
||||||