From 47f26c96f632b7c843bc3fd5271c3370c0a38ad6 Mon Sep 17 00:00:00 2001 From: Filip Rojek Date: Mon, 18 Dec 2023 03:33:05 +0100 Subject: [PATCH] console (#1) Reviewed-on: https://git.filiprojek.cz/fr/website/pulls/1 --- config.toml | 4 +- content/console.md | 4 ++ sass/console.scss | 5 ++ static/js/console.js | 107 +++++++++++++++++++++++++++++++++++++++++ templates/console.html | 12 +++++ 5 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 content/console.md create mode 100644 sass/console.scss create mode 100644 static/js/console.js create mode 100644 templates/console.html diff --git a/config.toml b/config.toml index 61f7d5f..0ba7103 100644 --- a/config.toml +++ b/config.toml @@ -16,7 +16,7 @@ smart_punctuation = true git = "https://git.filiprojek.cz/fr/website" nav_items = [ {name="Home", path="/"}, - {name="About", path="/about"}, - {name="Projects", path="/projects/"}, + #{name="About", path="/about"}, + #{name="Projects", path="/projects/"}, ] diff --git a/content/console.md b/content/console.md new file mode 100644 index 0000000..262408e --- /dev/null +++ b/content/console.md @@ -0,0 +1,4 @@ ++++ +title = "Console" +template = "console.html" ++++ diff --git a/sass/console.scss b/sass/console.scss new file mode 100644 index 0000000..38c3a00 --- /dev/null +++ b/sass/console.scss @@ -0,0 +1,5 @@ +.console { + background: gray; + width: 80vw; + min-height: 20vh; +} diff --git a/static/js/console.js b/static/js/console.js new file mode 100644 index 0000000..56bd92a --- /dev/null +++ b/static/js/console.js @@ -0,0 +1,107 @@ +const c = document.querySelector(".console") +const ps1 = "[fr@website ~]$ " +const motd = "Welcome to my website!
You can use `help` for more informations :)" +let line = ""; + +function exec(command) { + switch (command[0]) { + case "help": + line = "help
author
contact
clear
echo" + break; + case "author": + line = "Filip Rojek, 2023" + break + case "contact": + line = "Filip Rojek <filip@filiprojek.cz>
web: www.filiprojek.cz
telegram: @filiprojek" + break + case "clear": + write("000ctrll") + return false + case "echo": + line = "" + command.forEach((cmd, i) => { + if (i === 0) return + line += cmd + " " + }); + line = line.substring(0, line.length - 1) // remove last space + break + default: + line = "frsh: " + command[0] + ": command not found" + break; + } + + return line +} + +function write(key, payload) { + switch(key) { + case "Enter": + command = c.lastChild.textContent.replace(ps1, "") + command = command.split(" "); + let out = exec(command) + if(out !== false) { + line = document.createElement("p") + line.innerHTML += out + line.innerHTML += "
" + c.appendChild(line) + line = document.createElement("p") + line.innerHTML += ps1 + c.appendChild(line) + } + command = "" + break + case "000ctrll": + c.innerHTML = "" + if(payload == motd) c.innerHTML = motd + line = document.createElement("p") + line.innerHTML += ps1 + c.appendChild(line) + break + case "000backspace": + if(c.lastChild.textContent.slice(0, -1) !== ps1.slice(0, -1)) { + c.lastChild.innerHTML = c.lastChild.textContent.slice(0, -1) + } + break + + default: + c.lastChild.innerHTML += key + } +} + +function customCtrlShortcuts(plusKey) { + document.addEventListener("keydown", e => { + if(e.ctrlKey && e.key == plusKey) { + e.preventDefault() + write("000ctrl"+plusKey) + } + }) +} + +// On load init the terminal +window.addEventListener("load", () => { + write("000ctrll", motd) + if (navigator.userAgent.toLowerCase().includes("mobile")) { + const mi = document.querySelector(".mobile-input") + mi.style="opacity: 0; width: 0; height: 0" + c.addEventListener("click", e => { + mi.focus() + }) + } +}) + +// Capture the keypress +window.addEventListener("keypress", e => { + e.preventDefault() + write(e.key) +}) + +window.addEventListener("keydown", e => { + if(e.key == "Backspace") { + e.preventDefault() + write("000backspace") + } +}) + +// Register custom ctrl shortcuts +customCtrlShortcuts("l") // ctrl + l +customCtrlShortcuts("c") // ctrl + c diff --git a/templates/console.html b/templates/console.html new file mode 100644 index 0000000..cd10a87 --- /dev/null +++ b/templates/console.html @@ -0,0 +1,12 @@ +{% extends "base.html" %} + +{% block styles %} + +{% endblock styles %} + +{% block content %} +
+
+ + +{% endblock content %}